過去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個快速上手的開發技巧。

隨意留個言吧:)~