NSDocument唯一标识符

4

问:在基于文档的应用程序中,有没有一种获取NSDocument唯一标识符的方法,在应用程序重新启动期间保持不变?



注1:肯定应该有某种ID,不仅仅是fileURL,因为应用程序可以很好地处理自动保存甚至尚未保存的文档。

注2:由于某些原因,我不想生成并持久化此ID到文档的内容文件中。


你的文档是单个文件还是一个包?它有存储元数据的地方吗? - Michael Dautermann
@MichaelDautermann 这是一个单一的纯文本文件。 - kisileno
2个回答

3

即使我没有尝试过,我认为扩展属性可以完成这项工作:

uuid_t uuid;
[[NSUUID new] getUUIDBytes:uuid];

int result = setxattr( path, "com.yourcompany.yourapp.yourattr", &uuid, sizeof(uuid), 0, 0);

由于扩展属性既不是文件本身的一部分,也不是所有文件系统的标准,因此当文件被复制到不支持这些属性的文件系统的存储设备上时,这些属性可能会丢失。


0

我最终在关闭文档时,通过 coder 方法将数据保存到编码器中 encodeRestorableStateWithCoder,并在重新打开文档时,在 restoreDocumentWindowWithIdentifier 中恢复该数据。

- (void) encodeRestorableStateWithCoder: (NSCoder *) coder {
    [super encodeRestorableStateWithCoder: coder];
    [coder encodeObject: @{@"color":@"red"} forKey: @"OBJECT_KEY"];
}

- (void) restoreDocumentWindowWithIdentifier: (NSString *) identifier
                                       state: (NSCoder *) state
                           completionHandler: (void (^) (NSWindow *, NSError *)) completionHandler {
    NSDictionary * restoredInfo = [state decodeObjectForKey: @"OBJECT_KEY"];
    [super restoreDocumentWindowWithIdentifier: identifier state: state completionHandler: completionHandler];
}

我认为在那里保存一个生成的 UID 是可能的,但这种存储可能不太可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接