過去App的資料是被保護在沙盒(Sandbox)之中,因此無法讓其它App來存取。現在Apple設計一個共享區域,在此區域可以讓不同的App來存取,只是這些App必須是同一個開發者呢!
在專案中的Capabilities中打開App Groups,接著創立一個App Groups,我這裡是設定group.happy.share,程式碼中會用到喔~
接下來要寫兩個專案,一個負責寫入,另一個負責讀取,記得兩者皆要設定同一個App Groups喔!
很簡單地寫幾行程式碼就搞定!在此有兩種方法可以分享資料:
- 檔案共享
- 系統預設的plist檔資料共享
寫入部分
- (void)viewDidLoad { [super viewDidLoad]; // 共享方法一:檔案共享~寫入 NSFileManager *fm = [NSFileManager defaultManager]; NSURL *baseURL = [fm containerURLForSecurityApplicationGroupIdentifier:@"group.happy.share"]; NSURL *url = [[NSURL alloc] initWithString:@"HappyShare.txt" relativeToURL:baseURL]; NSString *string1 = @"快樂地過每一天~"; [string1 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]; // 共享方法二:系統預設的plist檔資料共享~寫入 NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:@"group.happy.share"]; NSString *string2 = @"每一天都要成長快樂~"; [ud setObject:string2 forKey:@"HappyShare"]; [ud synchronize]; }
讀取部分
- (void)viewDidLoad { [super viewDidLoad]; // 共享方法一:檔案共享~讀取 NSFileManager *fm = [NSFileManager defaultManager]; NSURL *baseURL = [fm containerURLForSecurityApplicationGroupIdentifier:@"group.happy.share"]; NSURL *url = [[NSURL alloc] initWithString:@"HappyShare.txt" relativeToURL:baseURL]; NSString *string1 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"string1: %@", string1); // 共享方法二:系統預設的plist檔資料共享~讀取 NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:@"group.happy.share"]; NSString *string2 = [ud valueForKey:@"HappyShare"]; NSLog(@"string2: %@", string2); }
先執行寫入,再執行讀取,就能在debug console看到以下結果:
string1: 快樂地過每一天~
string2: 每一天都要成長快樂~
如果懶得開兩個專案,就去GitHub下載我寫的專案吧~
參考:iOS 8程式設計實戰 – 205個快速上手的開發技巧。
隨意留個言吧:)~