我必须明确地在Xcode中启用异常吗?

时间:2010-06-10 09:32:48

标签: objective-c xcode core-data

-objectWithID:当ID不存在时,它应该给我一个被破坏的对象。文档说,当我尝试访问属性时,该对象会抛出异常。

然而,它永远不会抛出任何东西。我必须启用异常才能真正抛出它们吗?

以下是一些代码:

// Assume: a new managed object has been created. Then it's ID has been converted to NSURL.
// The MO has been saved. Then the NSURL has been converted back to an NSManagedObjectID *tmpID
// So tmpID is an ID that doesn't exist anymore, since the ID of the MO has changed due to persisting it
@try {
    NSManagedObject *mo = [context objectWithID:tmpID]; // tmpID doesnt exist anymore!
    NSString *timeStamp = [[mo valueForKey:@"timeStamp"] description]; // nil
    [mo setValue:[NSDate date] forKey:@"timeStamp"];
}
@catch (NSException * e) {
    NSLog(@"Error: %@: %@", [e name], [e reason]); // never called
}

1 个答案:

答案 0 :(得分:1)

你是如何测试的?核心数据项目往往会在默认情况下启用例外。

您的测试结果如何?

更新

你怎么知道tempID不存在?你能展示创建那个tempID的代码吗?

  

保存后,tmpID变为永久ID,对吗? ...所以当我将它转换为NSURL以保持它,然后在保存后将其转换回来时,它应该是无效的......或者不是吗?

无法保证。如果Core Data保留了从temp到ever的查询一段时间,我不会感到惊讶。

如果您确实希望看到它抛出异常,请将该temp更改为其他内容并将其抛出到Core Data。如果你之后仍然没有得到例外,那么就该提交雷达了。