XCode保存Core Data的相对路径,并在读取时创建完整路径

时间:2013-11-22 09:51:06

标签: xcode core-data path relative

我有以下问题:

我有实体,比如人。对于每个人,您可以制作一张照片。我将此照片的路径保存在此人的属性中。

每当我打开这个人时,我都会看到照片的路径,将其加载到UIImage中,一切正常。

但是当我更新应用程序时,应用程序的标识符将会更改,因此不再显示任何照片。更新后,照片的完整路径是错误的。

无论如何都要阻止标识符更改?

OR

如何使用相对路径保存照片?想法:我保存了对coredata的重复路径,在阅读时我将它与app-path一起使用。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

将照片的路径存储为相对于应用程序文档目录的路径。例如,像"photos/filename.png"

检索照片时,首先获取文档目录路径,然后使用urlByAppendingPathComponent:附加路径名称。

当然,与任何应用程序一样,当您执行任何操作来创建新的应用程序目录时,例如

  • 更改应用签名
  • 不同的设备
  • 不同的模拟器,
  • 不同的开发计算机,

您的核心数据存储和文档目录都将为空。

您可以使用存储在捆绑包中的数据预先设定核心数据和文档文件夹的种子(在首次运行时将其复制到文档文件夹中)。但是,当上述任何条件创建应用的新实例时,这将是您可用的唯一数据。

如果您想跨设备共享数据存储的状态,也许您想要考虑iCloud。但是,对于大型媒体文件(如照片),iCloud无法正常工作,而且还有unresolved problems iCloud和Core Data。

答案 1 :(得分:0)

将文件路径存储在NSURL中。然后,您可以将书签数据永久保存在核心数据中,并在以后检索它。

- (NSData*)bookmarkForURL:(NSURL*)url {
    NSError* theError = nil;
    NSData* bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile
                                            includingResourceValuesForKeys:nil
                                            relativeToURL:nil
                                            error:&theError];
    if (theError || (bookmark == nil)) {
        // Handle any errors.
        return nil;
    }
    return bookmark;
}

- (NSURL*)urlForBookmark:(NSData*)bookmark {
    BOOL bookmarkIsStale = NO;
    NSError* theError = nil;
    NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
                                            options:NSURLBookmarkResolutionWithoutUI
                                            relativeToURL:nil
                                            bookmarkDataIsStale:&bookmarkIsStale
                                            error:&theError];

    if (bookmarkIsStale || (theError != nil)) {
        // Handle any errors
        return nil;
    }
    return bookmarkURL;
}

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW10