命名与 NSManagedObject 关联的文件的最佳方法是什么。NSManagedObject 将保存此文件的 URL。
但我需要为我的文件创建一个唯一的文件名。是否有某种我可以使用的自动增量 ID?我应该使用 mktemp(但它不是临时文件)还是尝试将 NSManagedObjectId 转换为文件名?但我担心会有特殊字符可能会导致问题。
你有什么建议?
编辑:我有很多这样的 NSManagedObjects 并且每个都有自己的图像,所以我想为每张图片生成一个唯一的名称。
命名与 NSManagedObject 关联的文件的最佳方法是什么。NSManagedObject 将保存此文件的 URL。
但我需要为我的文件创建一个唯一的文件名。是否有某种我可以使用的自动增量 ID?我应该使用 mktemp(但它不是临时文件)还是尝试将 NSManagedObjectId 转换为文件名?但我担心会有特殊字符可能会导致问题。
你有什么建议?
编辑:我有很多这样的 NSManagedObjects 并且每个都有自己的图像,所以我想为每张图片生成一个唯一的名称。
您可以使用NSProcessInfo
来生成 guid:
[[NSProcessInfo processInfo] globallyUniqueString]
要引用一个文件,我建议将 guid 保留为NSManagedObject
属性,然后从应用程序支持目录中引用该名称的文件。
有一个很好的方法可以做到这一点,一个较早的答案几乎就是这样——为每个图像而不是整个过程生成一个 GUID。每当您需要一个唯一的字符串时调用此方法,然后将其存储在托管对象中:
+ (NSString *)getUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
我用它来存储捕获的电影和图像。
我考虑过使用时间来生成唯一的文件名,但我不喜欢这个解决方案,例如,如果时间被重置或更改,则有可能获得两次相同的文件名。
我很惊讶没有在网上找到有关此主题的更多信息。
从 iOS5 开始,现在可以选择将大 blob 存储在外部记录文件中。CoreData 根据记录的大小决定是否将记录存储在 sqlite 中。