假設我有一些數據要發佈到服務器。你在一個深深的地下酒窖(或者你使用t-mobile),你沒有互聯網連接。數據在哪裏?只要把它留在那裏等待連接?我寧願保存這些數據,並使其可用於上傳第二個連接。將數據保存到存儲器
使用SQlite是否可以做到這一點?這只是我想臨時存儲的幾個對象。
假設我有一些數據要發佈到服務器。你在一個深深的地下酒窖(或者你使用t-mobile),你沒有互聯網連接。數據在哪裏?只要把它留在那裏等待連接?我寧願保存這些數據,並使其可用於上傳第二個連接。將數據保存到存儲器
使用SQlite是否可以做到這一點?這只是我想臨時存儲的幾個對象。
那麼這取決於你,蘋果指定你需要檢查是否有互聯網連接可用。如果您請求失敗,您將收到錯誤信息。
如果稍後可以發送數據,請保存並稍後再試。如果您以後不能發送數據,請通知用戶數據無法發送。
這一切都取決於應用程序的規格。
我已經使用plist,SQLite和coredata將數據保存在設備上,並在網絡連接可用時將它們發送到服務器。
如果您已經準備好將數據存儲在數據庫中,只需添加一點即可告訴您是將數據發送至服務器還是讓服務器返回上傳標識以便更新某些記錄稍後的。
如果它不是一件大事,你可以使用NSUserDefaults
如果是一件大事,我建議你使用Core Data
如果這只是一對夫婦的對象要麼保存在NSUserDefaults的或在plist中的數據文件。
設置NSUserDefaults的:
[[NSUserDefaults standardUserDefaults] setObject:savedStr forKey:objectDataStoreName];
[[NSUserDefaults standardUserDefaults] synchronize];
得到NSUserDefaults的:
savedStr = [[NSUserDefaults standardUserDefaults] objectForKey:objectDataStoreName];
或使用的plist:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *newDirectory = [NSString stringWithFormat:@"%@/savedData", [paths objectAtIndex:0]];
[[NSFileManager defaultManager] createDirectoryAtPath:newDirectory withIntermediateDirectories:YES attributes:nil error:nil];
NSString *fullFileName = [NSString stringWithFormat:@"%@/savedItemsFile", newDirectory];
savedItems = [[NSMutableArray alloc] initWithContentsOfFile:fullFileName];
if (!savedItems) {
savedItems = [[NSMutableArray alloc] init];
}
savedItem = [[NSMutableDictionary alloc] init];
[savedItem setObject:savedStr forKey:objectDataStoreName];
[savedItems addObject:savedItem];
[savedItems writeToFile:fullFileName atomically:NO];
大示例代碼。有一個小問題:與服務器的連接是否需要安全(SSL等)? – user523234
以上只是將數據本地保存在設備上,不涉及服務器。至於在數據提交給遠程服務器時是否要使用安全數據連接取決於您,您的受衆,數據類型和功能要求。 – ader