5

我开始使用 Core Data,只是对存储 URL 之类的东西有疑问。

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

到目前为止,我的研究使我认为可能使用 mogenerator 然后重写属性访问器来处理字符串和 NSURL 之间的转换。只是想了解这是如何或通常是如何完成的,或者我是否只是通过打扰来为自己制造困难。

干杯尼克

4

3 回答 3

10

答案在某种程度上取决于 URL 实际上.

对于fileURL

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

对于其他一切

您的选择是存储:

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

最后一个可能仅在您拥有由 a 组成的 URL-baseURL并希望保留该知识时才有用。

于 2013-04-10T08:38:20.653 回答
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
}

如果您的 URL 有空格,您也可以考虑将它们替换为stringByReplacingPercentEscapesUsingEncoding:.

于 2013-02-16T09:32:35.983 回答
4

Xcode 9iOS 11+中,您可以简单地使用新的URI类型来存储URL.

于 2017-10-09T15:57:12.670 回答