Chcę, aby moja aplikacja zapisywała utworzone przez siebie dokumenty na dysku iCloud, ale mam trudności z śledzeniem tego, co napisał Apple. Oto, co mam do tej pory, ale nie jestem pewien, dokąd się udać.Zapisywanie dokumentów iOS 8 na dysku iCloud
Update2
Mam następujących w moim kodu ręcznie zapisać dokument na dysku iCloud:
- (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];
}];
}
mam uprawnienia ustanowione dla identyfikatora aplikacji iw samym Xcode. Klikam przycisk, aby zapisać na iCloud Drive, i nie pojawiają się żadne błędy, aplikacja nie ulega awarii, ale nic nie pojawia się na moim Macu w iCloud Drive. Aplikacja działa na moim iPhone 6 Plus przez Test Flight podczas korzystania z iOS 8.1.1.
Gdybym go uruchomić w symulatorze (wiem, że to nie będzie działać z powodu iCloud napęd nie działa z symulatorem), pojawia się błąd awarii: 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'
'setUbiquitous: itemAtURL: destinationUrl: error:' zwraca BOOL, czy operacja się powiodła, czy nie. Jaka jest wartość zwracana? Podaj także wskaźnik do obiektu 'NSError' dla parametru' error'. Jeśli metoda zwróci wartość NIE, prawdopodobnie zapewni to dodatkowe wskazówki. – fguchelaar
@fguchelaar Przepraszam, że nigdy nie zawiedliśmy zbyt wiele przy pomocy NSFileManager, więc niektóre z nich są nad moją głową. – user717452