我想在获取的对象中包含pk,因此我可以使用唯一的pk编号来获取唯一的图像文件名。
但是我无法使它工作,我只需要一个唯一的文件名来存储我的图像。 有人有解决方案吗?
当我的NSLog对象ID我得到这个:
NSManagedObjectID * ID = [someThing objectID]; NSLog(@“ID:%@”,ID);
输出: ID:0x124dd00
我知道最后一个p11,类似于PK,但最好的方法是什么?
答案 0 :(得分:10)
我们可以生成一个唯一的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。
答案 1 :(得分:2)
你可以这样做(假设其他人已经说过,对象ID已经是你对象的永久物):
[[[myManagedObject objectID] URIRepresentation] lastPathComponent]
......获得“p28”部分等。
希望这有帮助, 肯
答案 2 :(得分:0)
您无法直接访问SQL PK,因为这是CD使用的内部细节,可以使对象独特并可能发生变化。您可以使用NSManagedObjectID:
- (NSURL *) uniqueURLForManagedObject:(NSManagedObject *)managedObject {
NSManagedObjectID *objectID = managedObject.objectID;
NSURL *objectURL = managedObject.URIRepresentation
return objectURL;
}
然后,您可以将该URL用作文件名。您可能希望删除模式和其他一些位,但如果您对URL进行编码,使其只包含文件名中合法的字符,则不需要这样做。只需确保在执行此操作时该对象已被保存,或者该ID不是永久ID(有关详细信息,请查看NSManagedObjectID的文档)。
答案 3 :(得分:0)
好的,谢谢,现在我知道我正朝着正确的方向前进!当我NSLog所有的物体时,它们看起来都是一样的,除了最后一点。
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