UIManagedDocument saveToURL始终返回false

时间:2013-06-13 08:06:32

标签: iphone ios objective-c

我正在尝试创建一个尚不存在的UIManagedDocument。这是我的代码:

url = [NSURL URLWithString:@"file://ProjectSSDB"];
document = [[UIManagedDocument alloc] initWithFileURL:url];

if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
    [document openWithCompletionHandler: ^(BOOL success) {
        if (success) [ProjectSSViewController documentIsReady];
        if (!success) NSLog(@"Couldn't open document at %@", url);
    }];
} else {
    [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
        NSLog(@"Returned %d", success);
        if (success) [ProjectSSViewController documentIsReady];
        if (!success) NSLog(@"Couldn't create document at %@", url);
    }];
} 

我的问题是该文件尚不存在,saveToURL操作似乎总是返回false。无论如何我可以进一步调试这为什么会发生这种情况?

修改

好的,所以我无法写入该网址。我现在尝试这样做:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSURL *url = [NSURL URLWithString:documentsDirectory];

NSLog(@"The URL is %@", [url absoluteString]);

运行时,日志似乎返回URL为null。还有别的我做错了吗?

2 个答案:

答案 0 :(得分:1)

你不能在这条路径上写“file:// ProjectSSDB”,你没有权限,你需要以这种方式获取应用程序的根目录:

NSString* rootPath = NSHomeDirectory();

并将数据保存在Apple file system guide line

指定的子文件夹之一中
NSString* fullPath = [rootPath stringByAppendingPathComponent:@"subFoldeder/file.extension"];

答案 1 :(得分:0)

我已成功使用以下代码段生成UIManagedDocument网址一段时间了:

NSURL *url = [NSFileManager.defaultManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask].firstObject;
url = [url URLByAppendingPathComponent:@"ARBITRARY_NAME"];

self.document = [UIManagedDocument.alloc initWithFileURL:url];

P.s:它是iOS 5+解决方案。

请告诉我这是否适合您;)