iPhone UITableView странность - PullRequest
1 голос
/ 11 июня 2011

Я даже не уверен, как назвать эту проблему.Гораздо меньше, как искать решение.

Я использую Xcode 4. Я использую CoreData.У меня есть приложение панели вкладок.4 разные вкладки.Это проблема симулятора.

Представление корневой таблицы для двух вкладок заполняется массивом контроллеров.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];

SecondViewController *nextController = [self.medControllersArray objectAtIndex:row];
[self.navigationController pushViewController:nextController
                                     animated:YES];
}

При детализации до одного из контроллеровдругое табличное представление, как вы видите.

При нажатии кнопки «Добавить» в представлении таблицы следующего контроллера и добавлении имени или чего-либо еще для заполнения табличного представления, если вы переходите в другое представление таблицы следующего контроллера, оно заполняется.с той же информацией и другим табличным представлением.

Поскольку я получаю печально известную +entityForName ошибку

, я добавляю это в viewDidLoad

 if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(MIT2AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext_: %@",  managedObjectContext);
}

Добавьте это вметод делегата приложения application:didFinishLaunchingWithOptions

ViewController *viewController = [[ViewController alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
    NSLog(@"\nCould not create *context for self");
}

viewController.managedObjectContext = context;

Я сделал это для каждого имеющегося у меня следующего контроллера представления и корневых представлений для двух вкладок, для которых нет корневого представленияt и массив контроллеров.

Я также получаю это предупреждение в консоли при нажатии следующего представления:

After managedObjectContext_: <NSManagedObjectContext: 0x5934e10>

Надеюсь, все это имеет смысл,И этот кто-то может направить меня в правильном направлении.

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

Ответы [ 2 ]

0 голосов
/ 11 июня 2011

Слава Богу !!!Это сработало.Я допустил (я уверен в этом) ошибку Core Data новичка в моей модели данных.

Я получал дубликаты в симуляторе (а также в телефоне) из-за этой ошибки:

В модели данных у меня есть сущность для лекарств и всех атрибутов, бла, бла, бла.Я создал класс и решил использовать именно этот класс, чтобы разделить 3 вида таблицы, текущие лекарства, прошлые лекарства и аллергии.При этом естественно не было никакой дифференциации.Я вернулся, создал новую модель, объединил yada, yada и добавил 3 новых объекта для текущего, прошлого и аллергий.Затем установите там родительскую сущность в основную медицинскую сущность и абстрагируйте родителя.Когда я снова прошел и переработал код для новых сущностей.Все работало!Нет больше дублирования.Ну, на самом деле, больше не нужно трижды дублировать.

Предупреждение, которое я получал (не ошибка, приложение все еще строилось, не вылетало, и вы все еще могли работать через него), касалось контекста управляемого объекта.Чтобы заставить замолчать печально известную ошибку + entityForName, я попробовал кое-что, что я видел в книге или в Apple.Я импортировал AppDelegate в каждую из моих таблиц и в fetchedResultsController сделал это:

- (NSFetchedResultsController *)fetchedResultsController {
MIT2AppDelegate *mit = [[MIT2AppDelegate alloc] init];

if (fetchedResultsController != nil) {
    return fetchedResultsController;
}
    //if (fetchedResultsController == nil) {
    // Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];


    //  the entity name
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Allergies" inManagedObjectContext:mit.managedObjectContext];
[fetchRequest setEntity:entity];

При переработке кода я попробовал то, что рекомендовал tomasBULL: Как мне решить NSInternalInconsistencyException ', причина:' + entityForName:отчет об ошибках

Вот откуда пришла ошибка.Так что я вернулся к тому, что у меня было раньше и сейчас, больше ошибок нет.

Я делаю это в моем AppDelegate managedObjectModel

- (NSManagedObjectModel *)managedObjectModel{
    if (managedObjectModel != nil){
        return managedObjectModel;
    }

    NSString *path = [[NSBundle mainBundle]  pathForResource:@"MIT2ver 3" ofType:@"mom" inDirectory:@"MIT2ver2.momd"];

        NSURL *momURL = [NSURL fileURLWithPath:path];
        managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel;
}

Потому что раньше я делал еще одну ошибку новичка, когда добавилмодель я вынул пространство.Благодаря ответу udibr: Реализация «Автоматической облегченной миграции» для базовых данных (iPhone)

Спасибо всем, кто ответил.БОГ сработал!

0 голосов
/ 11 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...