【问题标题】:CoreData fails to save context, saying relationship is nil - however it is definitely setCoreData 无法保存上下文,说关系为零 - 但它肯定是设置的
【发布时间】:2012-02-18 01:53:44
【问题描述】:

当我尝试保存我的 CoreData 模型的上下文时,我收到一个错误

Unresolved error Error Domain=NSCocoaErrorDomain Code=1560 "The operation couldn’t be completed. (Cocoa error 1560.)" UserInfo=0x76924b0 {NSDetailedErrors=( "Error Domain=NSCocoaErrorDomain Code=1570 " The operation couldn\U2019t be completed. (Cocoa error 1570.)" UserInfo=0x768c410 {NSValidationErrorObject=<Posts: 0x7177990> (entity: Posts; id: 0x7177010 <x-coredata:///Posts/tEF7138E6-A968-45B7-95CF-116C2AA93D605> ; data: {\n " business_entity" = nil;\n "
created_at" = " 2012-01-21 03:31:30 +0000" ;\n " own_description" = " Roasted this morning- Panama Duncan Estate: A rose fragrance debuts flavors of pear, coconut and marshmallow with caramel throughout the cup." ;\n postsID = 4;\n " updated_at" = " 2012-01-21 03:31:30 +0000" ;\n}), NSValidationErrorKey=business_entity, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.)}",

关键部分是:

business_entity = nil;
NSValidationErrorKey=business_entity

但是,当我创建“帖子”对象时,我将它们设置为:

    // First try to find a business for the post
NSNumber* businessID = [NSNumber numberWithInteger: [(NSString*)[jsonInfo objectForKey:@"business_id"] integerValue]];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:kCoreDataModelNameBusinesses inManagedObjectContext: self.managedObjectContext]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"(businessesID == %i)", [businessID intValue]]];

NSError *error = nil;
NSArray *matchingManagedObjects = [__managedObjectContext executeFetchRequest:fetchRequest error:&error];

if(error) {
    NSLog(@"Error-createNewPostsWithJsonInfo: Unresolved error %@, %@", error, [error userInfo] );
    return;
}

// Check any results
if( [matchingManagedObjects count] == 0) {
    NSLog(@"Error-createNewPostsWithJsonInfo: Could not locate a matching businessId: %@ for postId:%@", businessID, (NSString*)[jsonInfo objectForKey:@"id"]);
}
// Check too many results    
if( [matchingManagedObjects count] > 1) {
    NSLog(@"Error-createNewPostsWithJsonInfo: Too many bussinesses match businessId: %@ for postId:%@", businessID, (NSString*)[jsonInfo objectForKey:@"id"]);
}

// Final sanity check outputs fine!!
NSLog(@"Business entity %@", (Businesses*)[matchingManagedObjects objectAtIndex:0] );

// Finally create the post 
Posts* newPosts = [NSEntityDescription
                           insertNewObjectForEntityForName:entityName inManagedObjectContext:self.managedObjectContext];

newPosts.created_at = [_dateFormater dateFromString: [jsonInfo objectForKey:@"created_at"] ];
newPosts.updated_at = [_dateFormater dateFromString: [jsonInfo objectForKey:@"updated_at"] ];
newPosts.own_description = [jsonInfo objectForKey:@"description"];
newPosts.postsID = [NSNumber numberWithInteger: [(NSString*)[jsonInfo objectForKey:@"id"] integerValue]];
[newPosts setBusiness_entity: (Businesses*)[matchingManagedObjects objectAtIndex:0] ];

所以我知道正在设置 business_entity,并且是正确的。 在这种情况下保存上下文时,什么会导致它出错?

如果有帮助,这里是模型:

【问题讨论】:

  • business_entity 是关系还是属性>

标签: iphone core-data xcode4 ios5 nsmanagedobjectcontext


【解决方案1】:

如果有人遇到此问题,则错误在于我在 coredatamodel 中设置关系的方式。

这些图片会比我解释得更好,但请确保您在所有者实体中将关系设置为多对多,否则它不会为您动态创建可变集

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多