简介
基于文档的app在mac下又是比较常见的形式,但是介绍的文章比较少。为了避免少走弯路,在此进行一些简单的介绍。
创建
创建一个mac app,在下图这个界面,勾选Create Document-Based Application
其中继承自NSDocument的Document就是文档类,区别于AppDelegate,Document不是单例,而是对应一个个文档实例。
自建文档文件图标
这里省略,格式为icns…
关联文件类型
- 导入文档图标(上步创建的图标)
- 在工程的Info里进行设置,如下图。
Document Types设置文档关联的文件,Identifier为文档标示。
Exported UTIs为具体的文档设置,Identifier必须和Document Types的一致,这里面可以设置图标,扩展名等等。
注意图标必须设置在Document Types里面,运行之后就会立即生效。
而且这两项都是可以设置多个关联的,关联多个文档类,关联多种格式。
运行
这时,运行工程,文件关联就已经完成了。可以创建一个指定的扩展名文件,看看是不是已经变成了指定的图标样式。如果没有改变,可以重启电脑之后看看。
编码
在Document.m文件里已经有两个函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
if ([typeName isEqualToString:@"com.tmyam.TestDocument.document"])
{
// TODO: 这里是具体的存储文件数据
return [@"test" dataUsingEncoding:4];
}
else
{
if (outError)
{
*outError = [NSError errorWithDomain:@"TestDocumentErrorDomain"
code:-1
userInfo:@{NSLocalizedFailureReasonErrorKey:[NSString stringWithFormat:@"Unsupported data type: %@", typeName]}];
}
}
return nil;
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
assert([typeName isEqualToString:@"com.tmyam.TestDocument.document"]);
// TODO: 这里是具体的读取文件数据
return YES;
}
|
示例
TestDocument示例下载