Iphone 核心数据:我希望在获取的对象中使用pk

Iphone 核心数据:我希望在获取的对象中使用pk,iphone,database,xcode,core-data,primary-key,Iphone,Database,Xcode,Core Data,Primary Key,我希望在我获取的对象中有pk,这样我就可以使用唯一的pk号作为唯一的图像文件名 但我不能让它工作,我只是需要一个唯一的文件名为我的图像。 有人能解决这个问题吗 当我输入NSLog对象ID时,我得到以下信息: NSManagedObjectID*ID=[someThing objectID]; NSLog(@“ID:%@”,ID) 输出: ID:0x124dd00 我知道最后一个p11,类似于pk,但最好的方法是什么???您无法直接访问SQL pk,因为这是CD用来唯一化对象的内部细节,可能会发生

我希望在我获取的对象中有pk,这样我就可以使用唯一的pk号作为唯一的图像文件名

但我不能让它工作,我只是需要一个唯一的文件名为我的图像。 有人能解决这个问题吗

当我输入NSLog对象ID时,我得到以下信息:

NSManagedObjectID*ID=[someThing objectID]; NSLog(@“ID:%@”,ID)

输出: ID:0x124dd00


我知道最后一个p11,类似于pk,但最好的方法是什么???

您无法直接访问SQL pk,因为这是CD用来唯一化对象的内部细节,可能会发生变化。您可以使用以下选项:


然后,您可以将该URL用作文件名。您可能希望删除模式和其他一些位,但如果您对URL进行编码,使其仅包含文件名中合法的字符,则无需删除这些位。执行此操作时,请确保对象已保存,否则该ID将不是永久ID(有关更多详细信息,请查看NSManagedObjectd的文档)。

好的,谢谢,现在我知道我看的方向是正确的!,当我记录所有对象时,它们看起来都一样,除了最后一点

ID1: x-coredata://5B58789C-70CE-40D7-B0BA-B9F56DEBFF61/Things/p28
ID1: x-coredata://5B58789C-70CE-40D7-B0BA-B9F56DEBFF61/Things/p27
ID1: x-coredata://5B58789C-70CE-40D7-B0BA-B9F56DEBFF61/Things/p26
ID1: x-coredata://5B58789C-70CE-40D7-B0BA-B9F56DEBFF61/Things/p25
我不能跳过第一部分,只使用文件名的最后一位吗。因此,我将我的文件命名为:

p25 p26 p27
p28

我们可以生成一个唯一的UUID,并将其存储为属性,而不是使用对象生命周期中不恒定的objectID。UUID可以按如下方式生成:

在托管对象的子类中,向awakeFromInsert添加以下代码:

- (void)awakeFromInsert;
{
    [super awakeFromInsert];
    CFUUIDRef UUID = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef UUIDString = CFUUIDCreateString(kCFAllocatorDefault,UUID);
    [self setValue:(NSString *)UUIDString forKey:@"uuid"];
    [UUID autorelease];
    [UUIDString autorelease];
}
这假设存储UUID的属性称为UUID。

很抱歉,回复太晚:)

您可以这样做(假设正如其他人所说,objectid对于您的对象来说已经是永久的):

[[myManagedObject对象ID]URIRepresentation]lastPathComponent]

。。。获取“p28”部件等

希望这有帮助,
Ken

请注意,一旦将对象保存到持久存储中,objectID就会更改!因此,您只能在保存对象后写入图像。如果您阅读答案,您会看到最后一句话是“在执行此操作时,请确保对象已保存,否则ID将不是永久ID(有关更多详细信息,请查阅NSManagedObjectID的文档)。”10.5及更高版本,可以获取未保存对象的永久ID-在iOS7 OSX10.8及更高版本中[NSManagedObjectContext获取永久对象:错误:]可以使用NSUID而不是旧的CFUUIDRef类型。
- (void)awakeFromInsert;
{
    [super awakeFromInsert];
    CFUUIDRef UUID = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef UUIDString = CFUUIDCreateString(kCFAllocatorDefault,UUID);
    [self setValue:(NSString *)UUIDString forKey:@"uuid"];
    [UUID autorelease];
    [UUIDString autorelease];
}