Iphone 核心数据:我希望在获取的对象中使用pk
我希望在我获取的对象中有pk,这样我就可以使用唯一的pk号作为唯一的图像文件名 但我不能让它工作,我只是需要一个唯一的文件名为我的图像。 有人能解决这个问题吗 当我输入NSLog对象ID时,我得到以下信息: NSManagedObjectID*ID=[someThing objectID]; NSLog(@“ID:%@”,ID) 输出: ID:0x124dd00Iphone 核心数据:我希望在获取的对象中使用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用来唯一化对象的内部细节,可能会发生
我知道最后一个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];
}