Установка целочисленного значения в контроллере табличного представления (didSelectRowAtIndexPath) для использования с PList (iOS) - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь использовать PList для заполнения контроллера представления, который выдвигается из контроллера представления, который выдвигается из представления таблицы. Проще говоря:

TableViewController -> DetailViewController -> 2ndDetailViewController (<- это тот, который я заполняю) </p>

Я пытаюсь сделать это, установив целочисленное значение, когда пользователь нажимает на строку в табличном представлении. Затем я буду использовать значение этого целого числа, чтобы указать на правильное значение в PList и вытащить соответствующую строку. Во втором View Controller я пытаюсь заполнить UIImageView изображением из PList. Вот код моего didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil];
     dealsDetail.dealsImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"];
     dealsDetail.dealsLabelString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Description"];
     dealsDetail.title = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Name"];     

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #1"]) {
    dealsDetail.dealsInt = 0;
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]];
}

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #2"]) {
    dealsDetail.dealsInt = 1;
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]];
}

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #3"]) {
    dealsDetail.dealsInt = 2;
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]];
}

[self.navigationController pushViewController:dealsDetail animated:YES];
[dealsDetail release];

Все заполняется правильно. Я попытался NSLog значение dealDetail.dealsInt как в контроллере табличного представления (при нажатии кнопки), так и в методе viewDidLoad DealsDetailViewController. Оба раза он возвращает значение «0» независимо от того, какую строку я щелкаю. Где я ошибся в своем синтаксисе?

EDIT -------- Вот что я получаю, когда выхожу из системы:

NSLog(@"%@",[dealsArray objectAtIndex:indexPath.row]);


2011-11-28 17:40:59.092 Stores Tab Bar[7386:207] {
    Barcode = "SampleBarCode3.png";
    Description = "Here's the deal 3";
    Image = "FritoTest.png";
    Name = "Deal #3";
    Thumbnail = "dollars.png";
}

Он записывает содержимое PList объекта, который был правильно нажат. Таким образом, он получает правильную информацию (которая, как я предполагал, была, поскольку она правильно заполняла табличное представление и подробное представление ...)

1 Ответ

2 голосов
/ 29 ноября 2011
if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #1"]) {
    dealsDetail.dealsInt = 0;
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]];
}

Это, кажется, противоречит вашему более раннему использованию объекта в dealsArray. Это похоже на словарь в строках выше:

dealsDetail.dealsImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"];

И все же здесь вы сравниваете его со статической строкой. То, что происходит, - то, что это не соответствует ни одному из них, если условия и так остаются в нуле.

Вы хотите следующее:

if ([[[dealsArray objectAtIndex:indexPath.row] objectForKey:@"Name"] isEqualToString:@"Deal #1"]) {

Заметьте, я беру другой objectForKey (ключ @), как указано выше, из словаря, и я также использую isEqualToString:, который является правильным способом сравнения строк.

...