gpt4 book ai didi

objective-c - NSKeyedArchiver 写 XML(或其他人类可读的)?

转载 作者:太空狗 更新时间:2023-10-30 03:30:52 26 4
gpt4 key购买 nike

我一直在尝试让 NSKeyedArchiver 以人类可读的形式写出我的数据(即不是二进制文件)我知道我可以使用 ...

setOutputFormat: NSPropertyListXMLFormat_v1_0

但是......我似乎无法获得正确的语法,任何人都可以指出我正确的方向吗?

NSData *artistData;

NSLog(@"(*) - Save All");
artistData = [NSKeyedArchiver archivedDataWithRootObject:artistCollection ];
[artistData writeToFile:@"/Users/fgx/Desktop/stuff" atomically:YES];

编辑

我添加了 setOutputFormat(见下文)但我在编译时收到警告,我错过了什么?

warning: NSData  may not respond to 'setOutputFormat:'

这是我使用的代码。

NSLog(@"(*) - Save All");
artistData = [NSKeyedArchiver archivedDataWithRootObject:artistCollection ];
[artistData setOutputFormat: NSPropertyListXMLFormat_v1_0];
[artistData writeToFile:@"/Users/fgx/Desktop/stuff" atomically:YES];

加里

最佳答案

这是你必须做的:

NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver setOutputFormat:NSPropertyListXMLFormat_v1_0];
[archiver encodeObject:artistCollection forKey:@"root"];
[archiver finishEncoding];
[data writeToFile:@"/Users/fgx/Desktop/stuff" atomically:YES];
[archiver release];

请注意,您必须使用[archiver encodeObject:artistCollection forKey:@"root"] 而不是[archiver encodeRootObject:artistCollection];正如肖恩所建议的那样。这是因为 NSKeyedArchiver 没有覆盖 NSCoder encodeRootObject: 方法。我认为这是一个错误,并将报告给 Apple。

现在,真正的问题是为什么要编写 XML 而不是默认的二进制格式?如果是为了调试目的,我建议你使用TextWrangler这将允许您像编辑 XML 一样透明地编辑二进制 plist 文件。

关于objective-c - NSKeyedArchiver 写 XML(或其他人类可读的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com