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

Nic*_*cer 5 core-data objective-c nsurl

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

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

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

干杯尼克

Mik*_*lah 10

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

对于fileURL

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

其他一切

您可以选择存储:

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

如果你有一个由a组成的URL -baseURL并希望保留这些知识,那么最后一个可能是有用的.


Lor*_*o B 4

根据是否使用 Monogenerator,我将使用第二种方法。覆盖“getters”和“setters”,执行从 URL 到字符串的映射

NSString *urlString = [url absoluteString];
Run Code Online (Sandbox Code Playgroud)

并使用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
}
Run Code Online (Sandbox Code Playgroud)

如果您的 URL 有空格,您可能还想将其替换为stringByReplacingPercentEscapesUsingEncoding: