我发现了关系中的一个关键错误。在保存块“saveOnSuccess”后,我尝试为我的SMUserManagedObject设置关系,并在日志中崩溃:
* 由于未捕获的异常'SMExceptionIncompatibleObject'而终止应用程序,原因:'找不到实体用户的属性,该用户映射到StackMob上的主键。属性名称应与以下格式之一匹配:lowercasedEntityNameId或lowercasedEntityName_id。如果User的托管对象子类继承自SMUserManagedObject,意味着它用于定义用户对象,则可以返回上述格式之一或任何带有可选下划线的小写字符串与StackMob上的主键字段匹配。 看起来像是:
NSManagedObjectContext *context = [[[SMClient defaultClient] coreDataStore] contextForCurrentThread];
User *user = [[User alloc] initNewUserInContext:context];
[user setUsername:@"username1"];
[context saveOnSuccess:^{
user.group = group; //an already created object <--- Have a crash
} onFailure:^{
}];
在此之后我的“组”架构被破坏了。任何尝试都是失败的。 如果我尝试在任何其他地方设置类似:
user.group = group; //Before using saveOnSuccess trick this line work perfectly!
我崩溃了。然后我需要删除stackmob“Schema Configuration”中的“Group”方案进行修复。 因此,我无法创建具有预设关系的用户对象。
答案 0 :(得分:1)
你可以做两件事之一......
将您的用户类更改为继承自SMUserManagedObject
。请参阅Stackmob Core Data Guide中的SMUserManagedObject部分。
或者在User类中定义一个返回主键字段名称的选择器:
- (NSString *)primaryKeyField
{
return @"username";
}
答案 1 :(得分:0)
我找到了一个解决方案:在我的AppDelegate行中“SM_CACHE_ENABLED = YES”使崩溃......