프로젝트에서 핵심 데이터를 사용하여 애플리케이션의 데이터를 저장하고 있습니다. 응용 프로그램은 인터넷에서 XML을로드하고 파싱 된 결과에서 생성 된 객체를 데이터 모델에 저장하려고합니다. 며칠 전까지는 제대로 작동하지 않았습니다. 데이터 모델을 변경 (개체에 하나의 속성 추가)하여 새 버전을 만들고 모델의 개체에 대한 새 스텁 클래스를 생성하기 위해 mogenerator를 실행했습니다. 그것의 대부분은 여전히 잘 작동하지만 완벽하게 작동하는 데 사용 된 코드에는 이상한 오류가 있습니다.'validateForInsert'에서 핵심 데이터가 실패합니다.
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)'
스택 트레이스 :
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를 사용하여 올바르게 진행되고 현재 버전으로 설정하는 등 모든 작업이 올바르게 진행되었습니다. 나는이 모든 것을 마지막으로 할 때 이러한 문제가 없었습니다 ...
유일한 차이점은 이제 3.2.5 또는 3.2.4에서 XCode 3.2.6으로 업그레이드된다는 것입니다. 기억이 안납니다. .
내 대상은 iPhone이며이 버전의 XCode와 함께 제공되는 4.3 iOS SDK를 사용하고 있습니다.
... 그리고 그들은 그렇게 보입니다. 3 월 25 일에 릴리스 된 xcode 버전은 정상적으로 작동하는 것 같습니다. 사이트에 우리에게 알려주는 것이 없기 때문에 3.2.6의 출시일이 갑자기 바뀌 었습니다. – Emiel