首先,你忽略了描述你的「問題」,只是你的情況。什麼是不符合你的期望?
核心數據實體上存在或缺乏屬性不會影響其行爲。
然而,「實體」這個名字讓我的spidey感到興奮。雖然NSManagedObject沒有(public)「entities」屬性或方法,但它確實有一個「entity」方法。
更新:我手動創建以下模型一個新的核心數據測試項目:
項目< - >實體< - >>富
和驗證碼:
NSManagedObjectContext *moc = [self managedObjectContext];
NSManagedObject *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:moc];
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Entities"
inManagedObjectContext:moc];
NSManagedObject *foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
inManagedObjectContext:moc];
[item setValue:ent forKey:@"entities"];
[foo setValue:ent forKey:@"entities"];
NSLog(@"%@ -> %@ -> %@", item, ent, foo);
和它工作得很好。
更新:我可以找到導致怪異的行爲最接近的事是這樣的:
[item setValue:@(YES) forKey:@"deleted"];
[item setValue:@(YES) forKey:@"is_deleted"];
NSLog(@"deleted=%@", [[item valueForKey:@"deleted"] boolValue] ? @"YES" : @"NO");
NSLog(@"is_deleted=%@", [[item valueForKey:@"is_deleted"] boolValue] ? @"YES" : @"NO");
日誌將打印「刪除= NO」和「IS_DELETED = YES」,這是不對的前一種情況。預先存在的「isDeleted」方法可以防止自動生成「已刪除」屬性的「已刪除」訪問器。