objective c - iCloud Drive - Read & Write (NSData) -
trying save custom objects nsdata upload icloud drive
any direction? tried key-value method, limited 1mb :/
is correct way? if yes, how can read icloud path?
+(void)icloudwrite:(nsdata*)data { nsurl* ubiq = [[nsfilemanager defaultmanager]urlforubiquitycontaineridentifier:nil]; nsurl *ubiquitouspackage = [[ubiq urlbyappendingpathcomponent:@"documents"] urlbyappendingpathcomponent:@"icloudhistory.zip"]; mydocument *mydoc = [[mydocument alloc] initwithfileurl:ubiquitouspackage]; mydoc.datacontent = data; [mydoc savetourl:[mydoc fileurl] forsaveoperation:uidocumentsaveforoverwriting completionhandler:^(bool success) { if (success) { nslog(@"synced icloud"); } else nslog(@"syncing failed icloud"); }]; }
edited:
// 1. file can uploaded icloud container of size (yes should having of space in icloud) lets take example sampledata.zip // 2. method upload or sync sampledata.zip file in icloud container, icloud checks metadata of file before uploads icloud container (so first time upload file , next time upload changes) -(void) icloudsyncing:(id)sender { //doc dir nsstring *documentsdirectory = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) objectatindex:0]; nsstring *filepath = [documentsdirectory stringbyappendingpathcomponent:@"sampledata.zip"]; nsurl *u = [[nsurl alloc] initfileurlwithpath:filepath]; nsdata *data = [[nsdata alloc] initwithcontentsofurl:u]; //get icloud container url nsurl *ubiq = [[nsfilemanager defaultmanager]urlforubiquitycontaineridentifier:nil];// in place of nil can add container name //create document dir in icloud container , upload/sync sampledata.zip nsurl *ubiquitouspackage = [[ubiq urlbyappendingpathcomponent:@"documents"]urlbyappendingpathcomponent:@"sampledata.zip"]; mydoc = [[mydocument alloc] initwithfileurl:ubiquitouspackage]; mydoc.zipdatacontent = data; [mydoc savetourl:[mydoc fileurl] forsaveoperation:uidocumentsaveforcreating completionhandler:^(bool success) { if (success) { nslog(@"sampledata.zip: synced icloud"); } else nslog(@"sampledata.zip: syncing failed icloud"); }]; } // 3 download data icloud container - (ibaction)getdata:(id)sender { //--------------------------get data icloud -----------------------------// id token = [[nsfilemanager defaultmanager] ubiquityidentitytoken]; if (token == nil) { nslog(@"icloud not login"); } else { nslog(@"icloud login"); nserror *error = nil; nsurl *ubiq = [[nsfilemanager defaultmanager]urlforubiquitycontaineridentifier:nil];// in place of nil can add container name nsurl *ubiquitouspackage = [[ubiq urlbyappendingpathcomponent:@"documents"]urlbyappendingpathcomponent:@"sampledata.zip"]; bool isfiledounloaded = [[nsfilemanager defaultmanager]startdownloadingubiquitousitematurl:ubiquitouspackage error:&error]; if (isfiledounloaded) { nslog(@"%d",isfiledounloaded); nsstring *documentsdirectory = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) objectatindex:0]; //changing file name sampledata.zip present in doc directory have used upload nsstring* filename = [nsstring stringwithformat:@"recsampledata.zip"]; nsstring* fileatpath = [documentsdirectory stringbyappendingpathcomponent:filename]; nsdata *datafile = [nsdata datawithcontentsofurl:ubiquitouspackage]; bool filestatus = [datafile writetofile:fileatpath atomically:no]; if (filestatus) { nslog(@"success"); } } else{ nslog(@"%d",isfiledounloaded); } } } //4 voila done :)
don't forget add following parameters plist
<key>nsubiquitouscontainers</key> <dict> <key>yourcloudcontainerid</key> <dict> <key>nsubiquitouscontainerisdocumentscopepublic</key> <true/> <key>nsubiquitouscontainername</key> <string>yourcloudcontainername</string> <key>nsubiquitouscontainersupportedfolderlevels</key> <string>any</string> </dict> </dict>
Comments
Post a Comment