#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