Основные данные терпят неудачу в 'validateForInsert' - PullRequest
0 голосов
/ 30 марта 2011

Для проекта, над которым я работаю, я использую основные данные для хранения данных приложения. Приложение загружает XML из Интернета и пытается сохранить объекты, сгенерированные из проанализированных результатов, в модели данных. Раньше это работало нормально, пока несколько дней назад. Я изменил модель данных (добавил одно свойство для объекта), поэтому создал новую версию и запустил mogenerator, чтобы сгенерировать новые классы-заглушки для объектов в модели. Большинство из них все еще работает нормально, но есть некоторые странные ошибки в коде, которые раньше работали идеально.

Во время синтаксического анализа XML создается объект и заполняются значения в нем. Одним из значений является URL-адрес изображения. В модели данных это значение может не быть NIL, но в XML это иногда. Я использую validateForInsert для элемента, чтобы проверить, могу ли я его зафиксировать. Это та часть, которая раньше работала нормально, но сейчас дает сбой, жалуясь на значение NIL.

Немного кода от парсера:

...
    currentItem = [[[MyItem alloc] initWithEntity:[self.dataModel entityByName:@"MyItem"] insertIntoManagedObjectContext:self.dataModel.managedObjectContext] autorelease];
    currentItem.label = [attributeDict objectForKey:LABEL];
    currentItem.paramString = [attributeDict objectForKey:QUERY_STRING];
    [currentItem setSortOrderValue:[[currentRootItem items] count]];

    [currentRootItem addItemsObject:currentItem];
} else if ([elementName isEqualToString:IMAGE]) {
    currentItem.imageLocation = [attributeDict objectForKey:IMAGE_URL];
...

Затем, когда документ анализируется, я делаю проверку:

...
    {
        NSArray *Items = [[myRootItem items] allObjects];
        for (MyItem *item in Items) {
            NSLog(@"%@", item);
            NSLog(@"before");
            NSLog(@"%d", [item validateForInsert:&validationError]);
            NSLog(@"after");
            if (![item validateForInsert:&validationError]) {
                [[self.dataModel managedObjectContext] deleteObject:item];
            }
        }
    }
...

Раньше все работало нормально, но теперь происходит сбой в validateForInsert:

2011-03-30 13:38:32.951 xx[915:207] before
2011-03-30 13:38:33.130 xx[915:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: Property/imageLocation/Entity/Item)'

StackTrace:

0   CoreFoundation                      0x022fc5a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x02450313 objc_exception_throw + 44
2   CoreFoundation                      0x022b4ef8 +[NSException raise:format:arguments:] + 136
3   CoreFoundation                      0x022b4e6a +[NSException raise:format:] + 58
4   CoreFoundation                      0x022fae15 -[__NSCFDictionary setObject:forKey:] + 293
5   CoreData                            0x013fa87c -[NSValidationErrorLocalizationPolicy _cachedObjectForKey:value:] + 172
6   CoreData                            0x013fa629 -[NSValidationErrorLocalizationPolicy _localizedPropertyNameForProperty:entity:] + 201
7   CoreData                            0x013fa4e7 -[NSValidationErrorLocalizationPolicy localizedPropertyNameForProperty:] + 71
8   CoreData                            0x013a844e -[NSManagedObject(_NSInternalMethods) _substituteEntityAndProperty:inString:] + 142
9   CoreData                            0x013a572e -[NSManagedObject(_NSInternalMethods) _generateErrorWithCode:andMessage:forKey:andValue:additionalDetail:] + 254
10  CoreData                            0x013598f1 -[NSPropertyDescription(_NSInternalMethods) _nonPredicateValidateValue:forKey:inObject:error:] + 161
11  CoreData                            0x01359485 -[NSAttributeDescription(_NSInternalMethods) _nonPredicateValidateValue:forKey:inObject:error:] + 85
12  CoreData                            0x01358b22 -[NSManagedObject(_NSInternalMethods) _validateValue:forProperty:andKey:withIndex:error:] + 386
13  CoreData                            0x01358847 -[NSManagedObject(_NSInternalMethods) _validatePropertiesWithError:] + 263
14  CoreData                            0x013586e1 -[NSManagedObject(_NSInternalMethods) _validateForSave:] + 81
15  xx                                  0x001af8bf -[MyParser parserDidEndDocument:] + 1039
16  Foundation                          0x00742717 _endDocument + 95

Я не могу понять, что пошло не так. Насколько я знаю, создание новой версии модели данных прошло успешно (с использованием XCode), установив ее на текущую версию и т. Д., Все прошло правильно. У меня не было этих проблем в последний раз, когда я делал все это ...

Единственное отличие состоит в том, что теперь я обновился до XCode 3.2.6, с 3.2.5 или 3.2.4, я не помню.

Моя цель - iPhone, и я использую iOS SDK 4.3, поставляемый с этой версией XCode.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

У меня была эта проблема, и я исправил ее, проверив длину данных. Если в вашей модели есть строковое поле, вы должны проверить, что передаваемая строка не превышает длину поля.

0 голосов
/ 01 апреля 2011

Ну, чтобы ответить на мой собственный вопрос ...

Проблема не в 3.2.5 и не в 4.0.1.Похоже, что на 3.2.6 у apple есть исправление ошибок ...

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