просмотр таблицы всегда обновляется дважды и завершается сбоем во второй раз

#iphone #cocoa-touch #ios #ipad #tableview

#iPhone #cocoa-touch #iOS #iPad #просмотр таблицы

Вопрос:

У меня есть класс FoodType, который считывает NSArray словарей из списка свойств. Он хранит взаимосвязь целочисленных значений и имен NSString.

Когда я добавляю новую запись, я инициализирую запись со значениями по умолчанию, использую класс FoodType для извлечения соответствующих строк и отображения их в «представлении добавления записи».

Каждый раз, когда я вызываю представление «добавить запись» (это подкласс tableview), все ячейки будут обновляться дважды. (Я узнал об этом, установив точку останова в cellForRowAtIndexPath).

Тогда возникает проблема. Отладчик показывает мне, что в первый раз тексты ячеек установлены правильно. Но во второй раз тот же фрагмент кода не может получить строку. Сбой означает, что он возвращает nil. Это код в cellForRowAtIndexPath: (запись является переменной класса)

 cell.detailTextLabel.text = [FoodTypes TypeName:record.TypeId];
  

Класс FoodTypes объявлен как

 @interface FoodTypes : NSObject {       
}

 (NSString*) TypeName: (NSNumber *) Type;
 (NSArray*) SubTypes: (NSNumber *)Type;
 (NSString*) SubType: (NSNumber *)Type atIndex:(NSNumber*)index;
 (NSString*) Unit: (NSNumber *) Type;
 (NSInteger) TypeCount;
@end
  

И это есть static NSArray *foodTypes_; в файле .m. Я не знаю, почему таблица обновляется дважды и должно ли это происходить дважды? ( record.TypeId Хотя это согласовано)

Самая большая проблема в том, что я не знаю, почему [FoodTypes TypeName] работает в первый раз, но возвращает nil (спасибо Eiko) во второй раз.


код при добавлении записей:

 FoodAddViewController *favCtrl = [[FoodAddViewController alloc] initWithNibName:@"FoodDetailView" bundle:nil];        
    favCtrl.delegate = self;

    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
    self.addingManagedObjectContext = addingContext;       

    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];

    favCtrl.record = (FeedRecordClass*)[NSEntityDescription insertNewObjectForEntityForName:@"FeedRecord" inManagedObjectContext:addingContext] ;

    [favCtrl.record init];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: favCtrl];

    [self.navigationController presentModalViewController:navController animated:YES];    

    [favCtrl release];
    [addingContext release];
    [navController release];
  

Комментарии:

1. Вам нужно показать больше кода. Что здесь означает «сбой»? Это запись. Введите допустимое значение?

Ответ №1:

Я думаю, вы передали делегирование tableview из nib. также вы перезагружаете таблицу из файла класса. проверьте это.

Комментарии:

1. делегат устанавливается, когда пользователь нажимает кнопку «Добавить», код прикреплен в моем OP