不推荐使用以下class D : public B<D> // <--- B<D> implicitly instantiated here
{
public:
// void f() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
}; // <--- D becomes complete here
方法及其等效的NSDictionary
与文件交互的方法:
NSArray
[NSDictionary dictionaryWithContentsOfURL:]
[NSDictionary dictionaryWithContentsOfFile:]
也
[NSDictionary initWithContentsOfFile:]
[NSDictionary writeToFile:atomically:]
我应该用什么来在Objective C中存储字典/数组?
答案 0 :(得分:2)
从NSDictionary.h中的注释中:
这些方法已被弃用,并在后续版本中标记为API_DEPRECATED。请改用使用错误的变体。
使用错误的变体是
- (nullable NSDictionary<NSString *, ObjectType> *)initWithContentsOfURL:(NSURL *)url error:(NSError **)error;
+ (nullable NSDictionary<NSString *, ObjectType> *)dictionaryWithContentsOfURL:(NSURL *)url error:(NSError **)error;
和
- (BOOL)writeToURL:(NSURL *)url error:(NSError **)error;
将此实例序列化为NSPropertyList格式的指定URL(使用NSPropertyListXMLFormat_v1_0)。对于其他格式,请直接使用NSPropertyListSerialization。
答案 1 :(得分:1)
虽然不够简洁,但是您可以使用NSPropertyListSerialization上的类方法在plist对象(包括NSArray和NSDictionary)和NSData之间进行转换,然后在NSData上使用API来从文件读取和写入。
例如,从文件中读取可能看起来像:
NSData *fileData = [NSData dataWithContentsOfFile:@"foo"];
NSError *error = nil;
NSDictionary *dict = [NSPropertyListSerialization propertyListWithData:fileData options:NSPropertyListImmutable format:NULL error:&error];
NSAssert([dict isKindOfClass:[NSDictionary class]], @"Should have read a dictionary object");
NSAssert(error == nil, @"Should not have encountered an error");
同样,写出文件是类似的,但是两个步骤相反:
NSError *error;
NSData *data = [NSPropertyListSerialization dataWithPropertyList:dict format:NSPropertyListXMLFormat_v1_0 options:0 error:&error];
NSAssert(error == nil, @"Should not have encountered an error");
[data writeToFile:@"foo" atomically:YES];
虽然这需要更多的击键才能编写,但这是…
foo
中的内容(XML v1.0格式的属性列表数据)error
指针给出了失败原因; NSData在其他更详细的方法中也将它们用于I / O)