Инициализировать NSMutableArray - PullRequest
1 голос
/ 01 июля 2011

Я очень новичок в xcode 3, и мне очень нужна помощь для этого

Я разработал свои приложения, используя UITableView и XML, чтобы показать содержимое.

у меня было 3 .xib файла, которые он rootViewController, SecondViewController и mainview.

Итак, проблема в следующем: Когда я пытаюсь выполнить didSelectrow в rootViewController и получить доступ к массиву NSMutableArray * в SecondViewController и заменить значение массива * новым значением массива в rootViewController перед анимацией нажатия.

Значение массива на моем SecondViewController было изменено в первый раз, но когда я нажал кнопку «Назад» и выбрал другую строку, мой массив SecondViewController продолжал читать предыдущий массив, не изменяя его на новый. Я пытаюсь инициализировать, но не повезло

Это мой код для rootViewController UITableview (didSelectRow):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if(2ndController == nil)

2ndController = [[DetailViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];

    //Declare xml NSMutable array record
    ListRecord *record = [self.entries objectAtIndex:indexPath.row];

    //access SecondViewController NSMutable *record
    2ndController.record = [[[NSMutableArray alloc] init] autorelease];   

        //inserting the value from firstview to secondview before push
    2ndController.record = record;



    //push animation
    [self.navigationController pushViewController:2ndController animated:YES];



}

Это мой второй контроллер вида:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    switch(indexPath.section)
    {
        case 0:

            [cell setText:record.name];
            break;
        case 1:

            [cell setText:record.Age];
            break;
        case 2:
        [cell setText:record.summary];
            break;
    }

    return cell;
}

Надеюсь, кто-нибудь может мне помочь ..

Заранее спасибо .....

Ответы [ 2 ]

4 голосов
/ 01 июля 2011

Мало вещей,

Вы делаете,

2ndController.record = [[[NSMutableArray alloc] init] autorelease];

и добавьте

[cell setText:record.name];

Очевидно, что свойство record не является экземпляром NSMutableArray, поэтому я думаю, что часть инициализации массива неверна, как вы делаете, и уже упоминалось,

2ndController.record = record;

Но проблема, я думаю, в том, что вы сохраняете свой подкласс UITableViewController. Вы пытались перезагрузить данные?

[self.tableView reloadData];

Добавьте это в viewWillAppear метод вашего DetailViewController.

1 голос
/ 01 июля 2011

Вы должны снова взглянуть на эти две строки:

2ndController.record = [[[NSMutableArray alloc] init] autorelease];   

//inserting the value from firstview to secondview before push
2ndController.record = record;

Первая строка не делает для вас ничего полезного.Он создает и инициализирует новый NSMutableArray и устанавливает свойство записи для этого нового массива.

Но затем в самой следующей строке вы снова устанавливаете то же свойство 'записи' для другого объекта, так что массив в первомлиния больше не ссылается.Так что вы могли бы и не создавать его.

Это не совсем ваша проблема, но этот комментарий слишком велик для комментария.:)

...