我在无处不在的iCloud容器中有UIDocument,并且在保存文档时需要将数据追加到文件中。我根据UIDocument文档重写了readFromURL::
和writeContents:::::
方法:
-(BOOL)writeContents:(id)Contents到URL:(NSURL *)URL for SaveOperation:(UIDocumentSaveOperation)saveOperation originalContentsURL:(NSURL *)originalContentsURL错误:(NSError * __ autoreleasing *)outError
{
NSFileCoordinator *协调器= [[NSFileCoordinator分配] initWithFilePresenter:self];
NSError *错误=无;
[coordinatorordinateWritingItemAtURL:url options:0 error:&error byAccessor:^(NSURL * newURL){
NSData *数据=内容; //正确的非空NSData
/// [数据writeToFile:newURL:]有效,但覆盖原始文件
NSOutputStream * stream = [[[NSOutputStream alloc] initWithURL:newURL append:YES];
如果(流)
{
NSInteger写入= [流写入:data.bytes maxLength:data.length];
if(写成!= data.length)
{
//这里失败,写== -1
NSLog(@“将数据写入UIDocument失败:%@,错误:%@”,newURL,stream.streamError);
}
}
其他
{
NSLog(@“将数据写入iCloudDocument失败:%@”,newURL);
}
}];
如果(错误)
{
NSLog(@“协调写入失败%@,错误:%@”,网址,错误);
* outError =错误;
}
返回错误==零;
}
访问器块具有不同的newURL,例如:url: file:///private/var/mobile/Library/Mobile%20Documents/XXXXXXX~com~test~test/test.doc
newURL: file:///private/var/mobile/Applications/5631D484-7661-4E9E-A342-B25297FC0E18/tmp/(A%20Document%20Being%20Saved%20By%20test%20)/test.doc
。[stream write::]
失败,因为newURL
文件不存在并且我无法追加数据,只能创建包含所有文档内容的文件。
文档编辑代码:
NSURL * url = [self.containerURL URLByAppendingPathComponent:kCloudDocumentName];
MyDocument * document = [[[MyDocument alloc] initWithFileURL:url];
[文档openWithCompletionHandler:^(BOOL成功){
如果(成功)
{
//更新一些文档数据
[self updateData:文档完成:无];
[document closeWithCompletionHandler:^(BOOL成功){
//在这里失败!
}];
}
}];
MyDocument存在于url
处无处不在的容器中,并且文档具有Normal状态。
在这种情况下,如何进行增量写入?怎么了?
最佳答案
在UIDocumnet中更改数据后,您可以使用:
-[UIDocumnet saveToURL:UIDocumnet.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];
不确定,对与否,但是可以在我的应用中使用。如果不对,请纠正我。
您可能需要在UIDocumnet的子类中覆盖此方法:
- (id) contentsForType:(NSString *)typeName error:(NSError **)outError
关于ios - 如何在iCloud中增量编写UIDocument?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21426445/