實現爲在我的管理對象實體的一個類別一個類的方法,帶着一幫其他的操作如下:核心數據 - 訪問對象返回從取EXC_BAD_ACCESS
+ (NSArray*)newArrayOfAllOtherBibs
{
NSManagedObjectContext* moc = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
NSString* entityName = NSStringFromClass([self class]);
NSEntityDescription* entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc];
[fetchRequest setEntity:entity];
NSError* error;
NSArray* items = [moc executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
NSMutableArray* bibArray = [NSMutableArray array];
for(int i = 0; i < [items count]; i++)
{
Person* person = [items objectAtIndex:i];
if(![person.isSelf isEqualToString:@"YES"])
{
// crash here!
if([person.bib length] > 0)
// crash here!
[bibArray addObject:person.bib];
}
}
return [bibArray retain];
}
所以它應該是查看Person的所有實體,返回一個非常簡單的提取,並將所有未標記爲「self」(屬性isSelf,類型NSString)的所有實體添加到返回給調用者的新數組中。所有其他添加/刪除/查找匹配的方法都運行良好。
使用
NSString* entityName = NSStringFromClass([self class]);
是企圖使功能更加通用的,所以我可以削減&以弱編輯需要粘貼這些功能的其他實體。
人看起來是這樣的:
@interface Person : NSManagedObject
{
}
@property (nonatomic, retain) NSString * bib;
@property (nonatomic, retain) NSString * isSelf;
[...]
@end
的問題是,有什麼事情就行了解釋EXC_BAD_ACCESS標記?分析儀沒有顯示在那個時候,人們顯然是好的,或者我預計它會在訪問.isSelf
時更早死掉。 (它可以做成布爾型,但我發現有兩種布爾型,一種BOOL和一種NSNumber,容易出錯)。如果person.bib是零,那麼調用它的長度仍然應該返回0?但它不可能零,因爲「圍兜」是這些實體的關鍵,而且沒有它就沒有創造。在這個階段沒有任何東西從商店中被刪除,這是自上次添加以來已經保存的新鮮商店。
這是一個很好的方法來找出問題所在 - 但我縮小了範圍,問題是「這怎麼可能」而不是「我爲什麼會崩潰」?使用主鍵(標記爲非可選)接收核心數據對象爲零是非常令人驚訝的。 – 2010-08-30 00:33:21