2011-03-30 80 views
0

對於我正在處理的項目,我正在使用核心數據來存儲應用程序的數據。應用程序從互聯網載入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),將其設置爲當前版本等,都是正確的。我沒有這些問題上次我做了所有這些...

唯一不同的是,現在我升級到XCode 3.2.6,從3.2.5或3.2.4,我不記得了。

我的目標是iPhone,我使用的是這個版本的XCode附帶的4.3 iOS SDK。

回答

0

好了,回答我的問題...

的問題是不存在的3.2.5,也不是沒有在4.0.1。看起來像蘋果3.2.6有一些bug修復...

+0

......看起來他們做到了。 3月25日發佈的xcode版本似乎工作正常。並不是說他們的網站上有任何內容告訴我們,只是3.2.6的發佈日期突然改變了。 – Emiel 2011-04-04 08:57:56

1

我有這個問題,我通過檢查我的數據長度來解決它。如果你的模型有一個字符串字段,你必須驗證你傳遞的字符串不超過字段長度。