文档closeWithCompletionHandler"
说:“保存操作结束后,执行completionHandler中的代码。” 但是,在我的应用程序中,此代码:
NSLog(@"closeWithCompletionHandler");
[self.document closeWithCompletionHandler:^(BOOL success) {
if (success) {
NSLog(@"completionHandler");
...
立即执行(在 iOS6.1 上):
2013-07-18 19:43:12.673 FooBar[819:907] closeWithCompletionHandler
2013-07-18 19:43:12.675 FooBar[819:907] completionHandler <-- look here
2013-07-18 19:43:16.234 FooBar[819:907] encoded
即使实际将数据写入文件需要几秒钟(我通过跟踪知道contentsForType:error:
)。
contentsForType:error:
实现如下所示:
- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
NSMutableDictionary* wrappers = [NSMutableDictionary dictionary];
[self encodeObject:self.data toWrappers:wrappers preferredFilename:kDocumentDataPath];
NSFileWrapper* fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:wrappers];
NSLog("encoded");
return fileWrapper;
}
请注意在完成处理程序执行后很长时间编码完成:
2013-07-18 19:43:12.675 FooBar[819:907] completionHandler
2013-07-18 19:43:16.234 FooBar[819:907] encoded <-- look here
为什么会这样?在继续之前,我应该如何确保将数据写入文件?