オンライン DVD の情報を iPhone に保存できるアプリを開発中です。localStorage や SQLite を使用するのは不思議です。また、将来アプリを更新する予定で、保存したデータを失いたくありません。どれをお勧めしますか?!
乾杯
オンライン DVD の情報を iPhone に保存できるアプリを開発中です。localStorage や SQLite を使用するのは不思議です。また、将来アプリを更新する予定で、保存したデータを失いたくありません。どれをお勧めしますか?!
乾杯
私のオンライン DVD の情報
大規模な情報になる可能性がある場合は、コア データまたは SQLite を使用します。
また、将来アプリを更新する予定で、保存したデータを失いたくない
古いバージョンを削除せずに更新すると、SQLite データが残ります。これは NSUserDefault でも同じように機能します。キーチェーンは永続的なデータ ストレージに使用できますが、少量のデータに使用できます。あなたの要件についてもっと知らなければ、これ以上言うことはできません。
とにかくSQLiteはあなたに良いオプションを提供します:
DB を初期化してアップグレードするサンプル コードを次に示します。
+(void) InitalizeDB
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success)
{
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"QuestionsDB.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
if (success)
{
if (sqlite3_open([dbPath UTF8String], &gDatabase) != SQLITE_OK)
{
sqlite3_close(gDatabase);
gDatabase = nil;
}
}
if (gDatabase != nil)
[self Upgrade];
}
+(void)Upgrade
{
sqlite3 *NewDatabase = nil;
NSString *NewDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"QuestionsDB.sqlite"];
const char *szVersion = "SELECT DBVersion FROM Version";
sqlite3_stmt *sqlOldVersion;
sqlite3_stmt *sqlNewVersion;
if (sqlite3_open([NewDBPath UTF8String], &NewDatabase) != SQLITE_OK)
{
sqlite3_close(NewDatabase);
NewDatabase = nil;
}
if (NewDatabase != nil)
{
if (sqlite3_prepare_v2(gDatabase, szVersion, -1, &sqlOldVersion, NULL) != SQLITE_OK)
NSAssert1(0, @"Failed to compile sql statment %s", sqlite3_errmsg(gDatabase));
if (sqlite3_prepare_v2(NewDatabase, szVersion, -1, &sqlNewVersion, NULL) != SQLITE_OK)
NSAssert1(0, @"Failed to compile sql statment %s", sqlite3_errmsg(NewDatabase));
if (sqlite3_step(sqlOldVersion) == SQLITE_ROW && sqlite3_step(sqlNewVersion) == SQLITE_ROW)
{
if (sqlite3_column_int(sqlOldVersion, 0) < sqlite3_column_int(sqlNewVersion, 0))
{
[self UpgradeCategories:NewDatabase];
[self UpgradeQuestions:NewDatabase];
[self UpgradeQuestionChoices:NewDatabase];
}
}
else
{
NSAssert(0, @"Failed to retreive questions database version.");
}
}
sqlite3_close(NewDatabase);
}