我开始玩核心数据,只是有一个关于存储URL等问题的问题。
我目前已将其配置为可转换的,但工作正常但是我觉得它可能不必要地存储多余的数据,因为它可以很容易地用文本表示我想知道我是否应该只存储绝对URL一个字符串并在加载时实例化一个NSURL对象(我怀疑是这种情况),如果是这样,应该如何实现呢?
到目前为止,我的研究使我想到可能使用mogenerator然后只是覆盖属性访问器来处理字符串和NSURL之间的转换。只是想了解一下这种情况或正常情况如何,或者我是否只是为了让自己变得困难甚至打扰。
干杯 尼克
答案 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
。