NSDocument唯一标识符

时间:2017-01-18 03:14:37

标签: objective-c macos unique uniqueidentifier nsdocument

问:有没有办法在基于Document的应用程序中获取NSDocument的唯一标识符,这在应用程序重启期间是持久的?



注意1:肯定应该有一些不仅仅是fileURL的ID,而是其他的因为app适用于自动保存甚至尚未保存的文档。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

由于扩展属性既不是文件本身的一部分,也不是所有文件系统的标准,当文件系统不支持这些属性的文件系统复制文件时,它们可能会丢失。

答案 1 :(得分:0)

我最终将数据保存到方法中的编码器中 文档关闭期间的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,但这个存储可能不太可靠。