我想在Iphone的核心数据中获取主键值,所以我使用NSManagedObjectID来获取objectID(与PK值大致相同)但是我遇到的问题是它总是返回0
这是我的代码块
-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
{
Maintness_Item *MainItem1; // my object model
NSManagedObjectID *yourManagedObjectID = [ MainItem1 objectID];
int yourManagedObject_PK = [[[[[yourManagedObjectID URIRepresentation] absoluteString] lastPathComponent] substringFromIndex:1] intValue];
NSLog(@"This is my managed object ID ...................%d",yourManagedObject_PK);
return 0;
}
注意:这里我回来0,可能有问题吗?如果有的话我应该在这里写什么?
请指导我
答案 0 :(得分:3)
我认为你不应该使用对象id作为私钥。它不是一个整数,有自己的表示。 NSManagedObjectID
确实存在于例如持久引用特定实体的情况。用户默认值,或跨持久存储创建弱引用(“连接”)。
您可以使用以下网址表示:
NSURL *uri = [[myObject objectID] URIRepresentation];
如果您想保留它,可以将其转换为NSData
,但您也可以将序列化URI。
如果您需要经典私钥,例如要在服务器上与数据的另一个实例进行通信,您应该创建自己的实体属性。只是不要滥用它们来替代托管对象模型关系。
注意:请UpperCaseNames
仅针对课程,例如,您应使用lowerCaseName
。
答案 1 :(得分:0)
NSManagedObjectID
不起作用,NSString
也不行。
如果尚未保存托管对象,则对象ID的绝对字符串将类似于:
x-coredata:///Entity/tE7D63E10-8BE4-41CE-A6DC-C131F6990F062
如果已已保存,则类似
x-coredata://F869550C-914E-4160-B8A7-9DD9A82F2CE2/Entity/p2
这两个版本都没有为-[NSString intValue]
提供任何好的目标。你可以在最后提取整数,但这对任何方式都没有用,甚至没有一点。您无法在任何地方使用该整数值。