将NSURL存储为Core Data中的字符串

时间:2013-02-16 08:49:59

标签: objective-c core-data nsurl

我开始玩核心数据,只是有一个关于存储URL等问题的问题。

我目前已将其配置为可转换的,但工作正常但是我觉得它可能不必要地存储多余的数据,因为它可以很容易地用文本表示我想知道我是否应该只存储绝对URL一个字符串并在加载时实例化一个NSURL对象(我怀疑是这种情况),如果是这样,应该如何实现呢?

到目前为止,我的研究使我想到可能使用mogenerator然后只是覆盖属性访问器来处理字符串和NSURL之间的转换。只是想了解一下这种情况或正常情况如何,或者我是否只是为了让自己变得困难甚至打扰。

干杯 尼克

3 个答案:

答案 0 :(得分:10)

答案在某种程度上取决于实际 的网址。

适用于file个网址

使用NSURL的例程来生成书签数据并存储它。这使您可以灵活地移动文件,并且可以包括沙盒应用程序的安全范围。

其他一切

您的选择是存储:

  • 来自-absoluteString
  • 的字符串表示形式
  • CFURLGetBytes()
  • 的数据表示
  • 使用NSCoder
  • 生成的数据

如果您的网址由-baseURL组成且希望保留该知识,那么最后一个可能才有用。

答案 1 :(得分:4)

根据Monogenerator的不同,我将使用第二种方法。覆盖“getters”和“setters”,使用

执行从URL到字符串的映射
NSString *urlString = [url absoluteString];

并使用setPrimitiveValue:forKey:及其对应部分

- (void)setYourURL:(NSURL*)newURL {
    [self willChangeValueForKey:@"yourURL"]; // call to notify the world you are modifying that property
    NSString* yourURLAsString = // perform the conversion here...
    [self setPrimitiveValue:yourURLAsString forKey:@"yourURL"];
    [self didChangeValueForKey:@"yourURL"]; // call to notify the world you've modified that property
}

如果您的网址包含空格,您也可以考虑将其替换为stringByReplacingPercentEscapesUsingEncoding:

答案 2 :(得分:1)

Xcode 9 iOS 11 + 中,您只需使用新的 URI 类型来存储Static files origin