【发布时间】:2015-01-19 00:18:57
【问题描述】:
我想让我的应用程序将它创建的文档保存到 iCloud Drive,但我很难按照 Apple 编写的内容进行操作。这是我到目前为止所拥有的,但我不确定从这里去哪里。
更新2
我的代码中有以下内容可以手动将文档保存到 iCloud Drive:
- (void)initializeiCloudAccessWithCompletion:(void (^)(BOOL available)) completion {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
self.ubiquityURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (self.ubiquityURL != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"iCloud available at: %@", self.ubiquityURL);
completion(TRUE);
});
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"iCloud not available");
completion(FALSE);
});
}
});
}
if (buttonIndex == 4) {
[self initializeiCloudAccessWithCompletion:^(BOOL available) {
_iCloudAvailable = available;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:selectedCountry];
NSURL* url = [NSURL fileURLWithPath: pdfPath];
[self.manager setUbiquitous:YES itemAtURL:url destinationURL:self.ubiquityURL error:nil];
}];
}
我已为 App ID 和 Xcode 本身设置了权利。我单击按钮保存到 iCloud Drive,并且没有弹出错误,应用程序没有崩溃,但 iCloud Drive 中的 Mac 上没有显示任何内容。该应用程序在使用 iOS 8.1.1 时通过 Test Flight 在我的 iPhone 6 Plus 上运行。
如果我在模拟器上运行它(我知道它不会工作,因为 iCloud Drive 不能与模拟器一起工作),我会收到崩溃错误:'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'
【问题讨论】:
-
setUbiquitous:itemAtURL:destinationURL:error:无论操作成功与否都返回一个 BOOL。返回值是多少?还为error参数提供指向NSError对象的指针。如果方法返回 NO,这可能会给你更多的指导。 -
@fguchelaar 抱歉,我从来没有对 NSFileManager 搞砸过,所以其中一些内容超出了我的想象。
标签: ios xcode ios8 icloud uidocument