我正在编写一个文本编辑器,我需要在应用程序保存的每个文件中存储一些信息(通常只是几个字符串;存储不需要特别持久)(而不是文本文件的一部分)因为其他应用程序可能会读取它并且信息仅特定于我的应用程序)。
我该怎么办?
更多信息:我有一个 NSDocument 设置,我想简单地存储一个 NSString 实例变量作为每个文件元数据。根据下面的答案,我想出了这个,目前有问题,导致程序在启动时崩溃:
#import <sys/xattr.h>
@interface MyDocument : NSDocument {
NSString *metadatum;
}
@implementation MyDocument
- (BOOL)writeToURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)err
{
BOOL output = [super writeToURL:url ofType:type error:err];
if(!setxattr([[url path] cStringUsingEncoding:NSUTF8StringEncoding],
"eu.gampleman.xattrs.style",
[metadatum cStringUsingEncoding:NSUTF8StringEncoding],
sizeof(char) * [styleName length], 0, 0))
{
NSLog(@"Write failure");
}
return output;
}
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)err {
char *output;
ssize_t bytes = getxattr([[url path] cStringUsingEncoding:NSUTF8StringEncoding],
"eu.gampleman.xattrs.style", &output, 1024, 0, 0);
if (bytes > 0) {
metadatum = [[NSString alloc] initWithBytes:output length:bytes
encoding:NSUTF8StringEncoding]; // <- crashes here with "EXC_BAD_ACCESS"
}
return [super readFromURL:url ofType:type error: err];
}
// ...
// fairly standard -dataOfType:error: and
// -readFromData:ofType:error: implementations
PS:如果你的回答真的很好(附上示例代码等),我会奖励 100rep 的赏金。