【问题标题】:Core NSManagedObjectID always return object 0 in iphone核心 NSManagedObjectID 总是在 iphone 中返回对象 0
【发布时间】:2013-04-08 05:37:50
【问题描述】:

我想在 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 ,可能有问题吗?如果有的话,我应该在这里写什么?

请指导我

【问题讨论】:

  • 控制台打印什么?
  • 这是我的控制台输出 -- 这是我的托管对象 ID ....................0
  • 您应该记录所有中间步骤:URIRepresenation、absoluteString、lastPathComponent、substringFromIndex 和 intValue。
  • 你有没有给MainItem1分配任何东西?否则为nilyourManagedObject_PK 将为零。
  • @MartinR 但我应该在这里分配什么?

标签: iphone objective-c xcode core-data


【解决方案1】:

我认为你不应该使用对象 id 作为私钥。它不是整数,有自己的表示。 NSManagedObjectID 确实是为了持久化对特定实体的引用,例如用户默认值,或跨持久存储创建弱引用(“连接”)。

有一个你可以使用的 URL 表示:

NSURL *uri = [[myObject objectID] URIRepresentation];

如果你想保留它,你可以把它变成NSData,但你也可以只序列化URI。

如果您需要经典私钥,例如要与服务器上的另一个数据实例进行通信,您应该创建自己的作为实体的属性。只是不要滥用它们来替代托管对象模型关系。

注意:请UpperCaseNames 仅用于课程,例如您应该使用lowerCaseName

【讨论】:

    【解决方案2】:

    NSManagedObjectID 不能这样工作,NSString 也不能。

    如果被管理的对象还没有被保存,对象ID的绝对字符串会是这样的:

    x-coredata:///Entity/tE7D63E10-8BE4-41CE-A6DC-C131F6990F062
    

    如果它已经被保存了,它会是这样的

    x-coredata://F869550C-914E-4160-B8A7-9DD9A82F2CE2/Entity/p2
    

    这两个版本都没有为-[NSString intValue] 提供任何好的目标。您可能会在最后提取整数,但是这一点用处都没有,甚至一点用处也没有。您不能在任何地方使用该整数值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2011-09-06
      • 1970-01-01
      • 2019-02-27
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多