我最近处理了一些错误,其中我将得到一个异常,它通过URI提到了一个托管对象。 URI有点帮助。它看起来有点像x-coredata:// blahblahblahblahblah / EntityName / p22。至少我可以告诉问题发生在什么类型的实体上,但我还没有能够跟踪它到特定的对象。到目前为止,我已经能够调试问题而无需弄清楚。
我想我可以追踪它。我可能会打开数据库并执行SQL查询,直到找到与URL中的某些内容相匹配的内容。然而,这似乎有点麻烦,如果我必须调试beta测试人员或部署用户设备上发生的问题,也不是很有效。所以我认为在创建对象时记录对象ID URI以及我可以识别对象的一些属性会很好。
应该简单吧?就在我在代码中创建一个对象之后,我做了类似
的NSLogNSLog(@"Created Foo instance: %@", [foo.objectID URIRepresentation]);
唯一的问题是,我得到的URI看起来不像上面那样。它们看起来更像x-coredata:/// EntityName / blahblahblahblahblah。我意识到我可能正在获得临时身份证。
那么,我怎样才能将其与永久ID相匹配?如果我能找到一个钩子,我可以在其中放置一条日志消息,说“具有临时ID%@重新分配永久ID%@的对象”,这就是我所需要的。
答案 0 :(得分:2)
我质疑这个的价值,但可以通过NSManagedObject
本身的两个方法来解决。
首先,直接在模型或子类中设置瞬态NSString
。然后覆盖以下方法:
- (void)willSave
{
if (![[self objectID] isTemporaryID]) return;
[self setTemporaryIDString:[[[self objectID] URIRepresentation] absoluteString]];
}
- (void)didSave
{
if (![self temporaryIDString]) return;
NSLog(@"%@ moved to %@", [self temporaryIDString], [[[self objectID] URIRepresentation] absoluteString]);
[self setTemporaryIDString:nil];
}
答案 1 :(得分:0)
核心数据NSManagedObject具有属性debugDescription,使用它。
NSManagedObject * customer = nil;
NSLog(@"customer : %@", customer.debugDescription);