2011-11-07 25 views
23

私は、デバイスデータベースにユーザーの情報をローカルに保存するアプリケーションを構築しています。特定のユーザーの場所を保存してテーブルビューで表示することを検討しています。そのため、ユーザーが後でアプリケーションを起動しても、履歴をプルして履歴テーブルに過去の場所をフィードできます。基本的には、ローカルデータベースからの読み取り/書き込み機能です。iphoneにローカルにデータを保存する

これまでのような質問が多かったのですが、外部データベースなしでローカルにデータを保存することはできませんでした。例えば、Core Dataを使用することがここでは正確かつ簡単なことではありません。

それに関するアドバイスをいただければ幸いです。

+0

チェックこの質問/答え: ます。http:// stackoverflowの.c om/questions/307313 /ベスト・ウェイ・データ・オン・ザ・アイホン – Ralfonso

+0

問題が解決した場合は、解決済みの質問をチェックして、同じ問題を抱えて将来的に人々を助ける答えを選択する必要があります –

+0

ちょっと@TommyG NSUserDefaults [https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/を使用するのではなく、SqLiteやCoreDateなどの外部データベースを使用する方がよい場合は、 NSUserDefaults_Class /]。だからあなたの人生を簡単にする方法については、ORMのライブラリを試してみると、https://github.com/LakithaRav/OLCOrm仕事を得るために。 – Laky

答えて

63

を見るためにXcodeのでそれを開くことができるようにNSStringのキー

によるアクセスは、内部的には、ちょうどPLISTです。 CoreDataは非常にクールですが、主にDB構造を格納し、複雑さを導入します(ただし、私はそれが大好きです:))。あなただけの文字列、配列など(基本的には環境設定)を格納する必要がある場合、あなたはNSUserDefaultsに行くことができます:

例えば:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; //load NSUserDefaults 
NSArray *fakeFavs = [[ NSArray alloc] initWithObjects:@"2",@"4", @"100", nil]; //declare array to be stored in NSUserDefaults 
[prefs setObject:fakeFavs forKey:@"favourites"]; //set the prev Array for key value "favourites" 
+1

ありがとう!どのように私は再びこのアプリケーションを起動時にこの配列を読んでいますか? – TommyG

+12

NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults]; NSMutableArray *お気に入り= [prefs arrayForKey:@ "お気に入り"]; –

+1

私たちがあなたを助けてくれたら、投票することを忘れないでください!もちろん –

10

あなたは、データを格納するために基本的に2つのオプションがあります。

  1. CoreData(あなたはiOSの新しいバージョンを使用することを計画している場合)
  2. のSQLite(SDKのすべてのバージョンをサポートしています)

をCoreDataはSQLiteを使用していますが、そのAPIは使いやすく(SQLを知る必要はなく、データを読み書きするための多くの関数を書く必要はありません)。

SQLite APIは、SQLite用のC APIを使用しているため、依然として非常に優れています。これは、非常によく文書化されており、使いやすくなっています。これにより、古いiOSプラットフォームをターゲットにできるという利点があります。

両方のオプションを使用すると、データはクライアント側に保存され、ユーザが自分の電話機をiTunesと同期するたびにバックアップされます。あなただけのいくつかの値を格納し、任意の検索ロジックを必要としない場合

+0

SQLiteは、サーバー上のデータベースをどこかに持っているときに使用されますか?私は1つのオブジェクトをローカルに格納し、それを読み書きする必要があります。 – TommyG

+0

@ TommyG:いいえ。あなたは技術的にサーバーでSQLiteを使用することができますが、私はそれをやめさせることを強くお勧めします。それは良い並行アクセスのサポートが欠けています。 SQLiteは、iPhone、Android Phone、またはシンプルなデスクトップアプリケーションなどの単一ユーザ環境で使用することを目的としたモバイルデータベースAPIです。 CoreDataはステージの後ろでそれを使用します。 –

+0

クール、ありがとう、私はそれを試してみよう! – TommyG

4

、あなたはNSUserDefaults

[NSUserDefaults standardUserDefaults] 

そのちょうどあなたが配列を格納することができ、辞書、文字列、int型、オブジェクトに表情を取ることができるし、あなたはquickyあなたがNSUserDefaultsを使用する必要があり、単純なデータの場合は、現在の状態

+0

私はそれに文字列の配列を書き込んで、次にユーザがアプリケーションを開くときにそれを読むことができますか?それは私が基本的に必要なものです。私はコアデータを調べましたが、正直なところ、私はそれが過度に必要なものを探しました... – TommyG

+0

はい、文字列の配列を書くことができます。 [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@ "myKey"] NSArray * myArray = [[NSUserDefaults standardUserDefaults] objectForKey:@ "myKey"]; – EricS

+0

はい、自動的に永続化されます。つまり、ユーザーがアプリケーションを閉じると、データはそのまま残っています。また、iTunesでバックアップしました – JeanLuc

0
Select Query:::::: 

NSArray *array_hiback =[app.sk lookupAllForSQL:@"SELECT * FROM cycle_datagathering_begoodyourselef ORDER BY RANDOM() LIMIT 1"]; 
    NSLog(@"%@",array_hiback);  

insert Query::::: 

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 
[dict setObject:@"0" forKey:@"isuploaded"]; 
     [app.sk insertDictionary:dict forTable:@"mindeditor"]; 
     [dict release]; 


update Query:::: 


    NSMutableDictionary *updatedata=[[NSMutableDictionary alloc]init]; 
[updatedata setObject: [[NSUserDefaults standardUserDefaults] objectForKey:@"savecycleid"] forKey:@"cycleid"]; 


delete Query::::: 

     [app.sk deleteWhere:[NSString stringWithFormat:@"rowid=%@",str] forTable:@"mindeditor"]; 

      [app.sk updateDictionary:updatedata forTable:@"mindeditor" where:[NSString stringWithFormat:@"rowid=%@", [[checkarray objectAtIndex:checkarray.count-1] objectForKey:@"cycleid"]]]; 
      [updatedata release]; 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
     { 


      sk = [[SKDatabase alloc] init]; 
      NSString *db = @"MindEditor.db"; 
      [sk initWithDynamicFile:db]; 
      [email protected]"0"; 
     } 


     SKDatabase.h 


    // 
    // SKDatabase.h 
    // Version 1.1 
    // 
    // Created by Shannon Appelcline on 9/11/08. 
    // Copyright 2008 __MyCompanyName__. All rights reserved. 
    // 

    #import <UIKit/UIKit.h> 
    #import <sqlite3.h> 

    @protocol SKDatabaseDelegate <NSObject> 
    @optional 
    - (void)databaseTableWasUpdated:(NSString *)table; 
    @end 

    @interface SKDatabase : NSObject { 

     id<SKDatabaseDelegate> delegate; 
     sqlite3 *dbh; 
     BOOL dynamic; 
    } 

    @property (assign) id<SKDatabaseDelegate> delegate; 
    @property sqlite3 *dbh; 
    @property BOOL dynamic; 

    - (id)initWithFile:(NSString *)dbFile; 
    - (id)initWithDynamicFile:(NSString *)dbFile; 
    - (void)close; 

    - (sqlite3_stmt *)prepare:(NSString *)sql; 

    - (id)lookupColForSQL:(NSString *)sql; 
    - (NSDictionary *)lookupRowForSQL:(NSString *)sql; 
    - (NSArray *)lookupAllForSQL:(NSString *)sql; 

    - (int)lookupCountWhere:(NSString *)where forTable:(NSString *)table; 
    - (int)lookupMax:(NSString *)key Where:(NSString *)where forTable:(NSString *)table; 
    - (int)lookupSum:(NSString *)key Where:(NSString *)where forTable:(NSString *)table; 

    - (void)insertArray:(NSArray *)dbData forTable:(NSString *)table; 
    - (void)insertDictionary:(NSDictionary *)dbData forTable:(NSString *)table; 

    - (void)updateArray:(NSArray *)dbData forTable:(NSString *)table; 
    - (void)updateArray:(NSArray *)dbData forTable:(NSString *)table where:(NSString *)where; 
    - (void)updateDictionary:(NSDictionary *)dbData forTable:(NSString *)table; 
    - (void)updateDictionary:(NSDictionary *)dbData forTable:(NSString *)table where:(NSString *)where; 
    - (void)updateSQL:(NSString *)sql forTable:(NSString *)table; 

    - (void)deleteWhere:(NSString *)where forTable:(NSString *)table; 

    - (BOOL)runDynamicSQL:(NSString *)sql forTable:(NSString *)table; 

    @end 

     SKDatabase.m 




    // 
    // SKDatabase.m 
    // Version 1.1 
    // 
    // Created by Shannon Appelcline on 9/11/08. 
    // Copyright 2008 __MyCompanyName__. All rights reserved. 
    // 

    #import "SKDatabase.h" 

    @implementation SKDatabase 

    @synthesize delegate; 
    @synthesize dbh; 
    @synthesize dynamic; 

    // Two ways to init: one if you're just SELECTing from a database, one if you're UPDATing 
    // and or INSERTing 

    - (id)initWithFile:(NSString *)dbFile { 
     if (self = [super init]) { 

      NSString *paths = [[NSBundle mainBundle] resourcePath]; 
      NSString *path = [paths stringByAppendingPathComponent:dbFile]; 

      int result = sqlite3_open([path UTF8String], &dbh); 
      NSAssert1(SQLITE_OK == result, NSLocalizedStringFromTable(@"Unable to open the sqlite database (%@).", @"Database", @""), [NSString stringWithUTF8String:sqlite3_errmsg(dbh)]); 
      self.dynamic = NO; 
     } 

     return self;  
    } 

    - (id)initWithDynamicFile:(NSString *)dbFile { 
     if (self = [super init]) { 

      NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *docDir = [docPaths objectAtIndex:0]; 
      NSString *docPath = [docDir stringByAppendingPathComponent:dbFile]; 

      NSFileManager *fileManager = [NSFileManager defaultManager]; 

      if (![fileManager fileExistsAtPath:docPath]) { 

       NSString *origPaths = [[NSBundle mainBundle] resourcePath]; 
       NSString *origPath = [origPaths stringByAppendingPathComponent:dbFile]; 

       NSError *error; 
       int success = [fileManager copyItemAtPath:origPath toPath:docPath error:&error];    
       NSAssert1(success,[NSString stringWithString:@"Failed to copy database into dynamic location"],error); 
      } 
      int result = sqlite3_open([docPath UTF8String], &dbh); 
      NSAssert1(SQLITE_OK == result, NSLocalizedStringFromTable(@"Unable to open the sqlite database (%@).", @"Database", @""), [NSString stringWithUTF8String:sqlite3_errmsg(dbh)]); 
      self.dynamic = YES; 
     } 

     return self;  
    } 

    // Users should never need to call prepare 

    - (sqlite3_stmt *)prepare:(NSString *)sql { 

     const char *utfsql = [sql UTF8String]; 

     sqlite3_stmt *statement; 

     if (sqlite3_prepare([self dbh],utfsql,-1,&statement,NULL) == SQLITE_OK) { 
      return statement; 
     } else { 
      return 0; 
     } 
    } 

    // Three ways to lookup results: for a variable number of responses, for a full row 
    // of responses, or for a singular bit of data 

    - (NSArray *)lookupAllForSQL:(NSString *)sql { 
     sqlite3_stmt *statement; 
     id result; 
     NSMutableArray *thisArray = [NSMutableArray arrayWithCapacity:4]; 
     if (statement = [self prepare:sql]) { 
      while (sqlite3_step(statement) == SQLITE_ROW) { 
       NSMutableDictionary *thisDict = [NSMutableDictionary dictionaryWithCapacity:4]; 
       for (int i = 0 ; i < sqlite3_column_count(statement) ; i++) 
       { 
        if (sqlite3_column_decltype(statement,i) != NULL && 
         strcasecmp(sqlite3_column_decltype(statement,i),"Boolean") == 0) 
        { 
         result = [NSNumber numberWithBool:(BOOL)sqlite3_column_int(statement,i)]; 
        } 
        else if (sqlite3_column_type(statement, i) == SQLITE_TEXT) 
        { 
         result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,i)]; 
        } 
        else if 
         (sqlite3_column_type(statement,i) == SQLITE_INTEGER) 
        { 
         result = [NSNumber numberWithInt:(int)sqlite3_column_int(statement,i)]; 
        } 
        else if (sqlite3_column_type(statement,i) == SQLITE_FLOAT) 
        { 
         result = [NSNumber numberWithFloat:(float)sqlite3_column_double(statement,i)];     
        } 
        else 
        { 
         result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,i)]; 
        } 
        if (result) 
        { 
         [thisDict setObject:result 
            forKey:[NSString stringWithUTF8String:sqlite3_column_name(statement,i)]]; 
        } 
       } 
       [thisArray addObject:[NSDictionary dictionaryWithDictionary:thisDict]]; 
       [thisArray retain]; 
      } 
     } 
     sqlite3_finalize(statement); 
     return thisArray; 
    } 

    - (NSDictionary *)lookupRowForSQL:(NSString *)sql { 
     sqlite3_stmt *statement; 
     id result; 
     NSMutableDictionary *thisDict = [NSMutableDictionary dictionaryWithCapacity:4]; 
     if (statement = [self prepare:sql]) 
     { 
      if (sqlite3_step(statement) == SQLITE_ROW) 
      { 
       for (int i = 0 ; i < sqlite3_column_count(statement) ; i++) 
       { 
        if (strcasecmp(sqlite3_column_decltype(statement,i),"Boolean") == 0) 
        { 
         result = [NSNumber numberWithBool:(BOOL)sqlite3_column_int(statement,i)]; 
        } 
        else if (sqlite3_column_type(statement, i) == SQLITE_TEXT) 
        { 
         result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,i)]; 
        } 
        else if (sqlite3_column_type(statement,i) == SQLITE_INTEGER) 
        { 
         result = [NSNumber numberWithInt:(int)sqlite3_column_int(statement,i)]; 
        } 
        else if (sqlite3_column_type(statement,i) == SQLITE_FLOAT) 
        { 
         result = [NSNumber numberWithFloat:(float)sqlite3_column_double(statement,i)];     
        } 
        else 
        { 
         result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,i)]; 
        } 
        if (result) 
        { 
         [thisDict setObject:result 
            forKey:[NSString stringWithUTF8String:sqlite3_column_name(statement,i)]]; 
        } 
       } 
      } 
     } 
     sqlite3_finalize(statement); 
     return thisDict; 
    } 

    - (id)lookupColForSQL:(NSString *)sql { 

     sqlite3_stmt *statement; 
     id result; 
     if (statement = [self prepare:sql]) { 
      if (sqlite3_step(statement) == SQLITE_ROW) {   
       if (strcasecmp(sqlite3_column_decltype(statement,0),"Boolean") == 0) { 
        result = [NSNumber numberWithBool:(BOOL)sqlite3_column_int(statement,0)]; 
       } else if (sqlite3_column_type(statement, 0) == SQLITE_TEXT) { 
        result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,0)]; 
       } else if (sqlite3_column_type(statement,0) == SQLITE_INTEGER) { 
        result = [NSNumber numberWithInt:(int)sqlite3_column_int(statement,0)]; 
       } else if (sqlite3_column_type(statement,0) == SQLITE_FLOAT) { 
        result = [NSNumber numberWithDouble:(double)sqlite3_column_double(statement,0)];      
       } else { 
        result = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,0)]; 
       } 
      } 
     } 
     sqlite3_finalize(statement); 
     return result; 

    } 

    // Simple use of COUNTS, MAX, etc. 

    - (int)lookupCountWhere:(NSString *)where forTable:(NSString *)table { 

     int tableCount = 0; 
     NSString *sql = [NSString stringWithFormat:@"SELECT COUNT(*) FROM %@ WHERE %@", 
         table,where];  
     sqlite3_stmt *statement; 

     if (statement = [self prepare:sql]) { 
      if (sqlite3_step(statement) == SQLITE_ROW) {   
       tableCount = sqlite3_column_int(statement,0); 
      } 
     } 
     sqlite3_finalize(statement); 
     return tableCount; 

    } 

    - (int)lookupMax:(NSString *)key Where:(NSString *)where forTable:(NSString *)table { 

     int tableMax = 0; 
     NSString *sql = [NSString stringWithFormat:@"SELECT MAX(%@) FROM %@ WHERE %@", 
         key,table,where];  
     sqlite3_stmt *statement; 
     if (statement = [self prepare:sql]) { 
      if (sqlite3_step(statement) == SQLITE_ROW) {   
       tableMax = sqlite3_column_int(statement,0); 
      } 
     } 
     sqlite3_finalize(statement); 
     return tableMax; 

    } 

    - (int)lookupSum:(NSString *)key Where:(NSString *)where forTable:(NSString *)table { 

     int tableSum = 0; 
     NSString *sql = [NSString stringWithFormat:@"SELECT SUM(%@) FROM %@ WHERE %@", 
         key,table,where];  
     sqlite3_stmt *statement; 
     if (statement = [self prepare:sql]) { 
      if (sqlite3_step(statement) == SQLITE_ROW) {   
       tableSum = sqlite3_column_int(statement,0); 
      } 
     } 
     sqlite3_finalize(statement); 
     return tableSum; 

    } 

    // INSERTing and UPDATing 

    - (void)insertArray:(NSArray *)dbData forTable:(NSString *)table { 

    // NSMutableString *sql = [NSMutableString stringWithCapacity:16]; 
    // [sql appendFormat:@"INSERT INTO %@ (",table]; 
    // 
    // 
    // for (int i = 0 ; i < [dbData count] ; i++) { 
    //  NSLog(@"%@",[[dbData objectAtIndex:i] objectForKey:@"mid"]); 
    //  [sql appendFormat:@"%@",[[dbData objectAtIndex:i] objectForKey:@"key"]]; 
    //  if (i + 1 < [dbData count]) { 
    //   [sql appendFormat:@", "]; 
    //  } 
    // } 
    // [sql appendFormat:@") VALUES("]; 
    // for (int i = 0 ; i < [dbData count] ; i++) { 
    //  if ([[[dbData objectAtIndex:i] objectForKey:@"value"] intValue]) { 
    //   [sql appendFormat:@"%@",[[[dbData objectAtIndex:i] objectForKey:@"value"] intValue]]; 
    //  } else { 
    //   [sql appendFormat:@"'%@'",[[dbData objectAtIndex:i] objectForKey:@"value"]]; 
    //  } 
    //  if (i + 1 < [dbData count]) { 
    //   [sql appendFormat:@", "]; 
    //  } 
    // } 
    // [sql appendFormat:@")"]; 
    // [self runDynamicSQL:sql forTable:table]; 
     for(int i=0;i<[dbData count];i++) 
     { 
      NSDictionary *dict=[dbData objectAtIndex:i]; 
      NSMutableString *sql = [NSMutableString stringWithCapacity:16]; 
      [sql appendFormat:@"INSERT INTO %@ (",table]; 

      NSArray *dataKeys = [dict allKeys]; 
      for (int i = 0 ; i < [dataKeys count] ; i++) { 
       [sql appendFormat:@"%@",[dataKeys objectAtIndex:i]]; 
       if (i + 1 < [dataKeys count]) { 
        [sql appendFormat:@", "]; 
       } 
      } 

      [sql appendFormat:@") VALUES("]; 
      for (int i = 0 ; i < [dataKeys count] ; i++) { 
       if ([[dict objectForKey:[dataKeys objectAtIndex:i]] intValue]) { 
        [sql appendFormat:@"%@",[dict objectForKey:[dataKeys objectAtIndex:i]]]; 
       } else { 
        [sql appendFormat:@"'%@'",[dict objectForKey:[dataKeys objectAtIndex:i]]]; 
       } 
       if (i + 1 < [dict count]) { 
        [sql appendFormat:@", "]; 
       } 
      } 

      [sql appendFormat:@")"]; 
      [self runDynamicSQL:sql forTable:table]; 
     } 
    } 

    - (void)insertDictionary:(NSDictionary *)dbData forTable:(NSString *)table { 

     NSMutableString *sql = [NSMutableString stringWithCapacity:16]; 
     [sql appendFormat:@"INSERT INTO %@ (",table]; 

     NSArray *dataKeys = [dbData allKeys]; 
     for (int i = 0 ; i < [dataKeys count] ; i++) { 
      [sql appendFormat:@"%@",[dataKeys objectAtIndex:i]]; 
      if (i + 1 < [dbData count]) { 
       [sql appendFormat:@", "]; 
      } 
     } 

     [sql appendFormat:@") VALUES("]; 
     for (int i = 0 ; i < [dataKeys count] ; i++) { 
      //if ([[dbData objectForKey:[dataKeys objectAtIndex:i]] intValue]) { 
    //   [sql appendFormat:@"%@",[dbData objectForKey:[dataKeys objectAtIndex:i]]]; 
    //  } else { 

      [sql appendFormat:@"'%@'",[dbData objectForKey:[dataKeys objectAtIndex:i]]]; 
      //} 
      if (i + 1 < [dbData count]) { 
       [sql appendFormat:@", "]; 
      } 
     } 

     [sql appendFormat:@")"]; 
     [self runDynamicSQL:sql forTable:table]; 
    } 

    - (void)updateArray:(NSArray *)dbData forTable:(NSString *)table { 
     [self updateArray:dbData forTable:table where:NULL]; 
    } 

    - (void)updateArray:(NSArray *)dbData forTable:(NSString *)table where:(NSString *)where { 

     NSMutableString *sql = [NSMutableString stringWithCapacity:16]; 
     [sql appendFormat:@"UPDATE %@ SET ",table]; 

     for (int i = 0 ; i < [dbData count] ; i++) { 
      if ([[[dbData objectAtIndex:i] objectForKey:@"value"] intValue]) { 
       [sql appendFormat:@"%@=%@", 
       [[dbData objectAtIndex:i] objectForKey:@"key"], 
       [[dbData objectAtIndex:i] objectForKey:@"value"]]; 
      } else { 
       [sql appendFormat:@"%@='%@'", 
       [[dbData objectAtIndex:i] objectForKey:@"key"], 
       [[dbData objectAtIndex:i] objectForKey:@"value"]]; 
      }  
      if (i + 1 < [dbData count]) { 
       [sql appendFormat:@", "]; 
      } 
     } 
     if (where != NULL) { 
      [sql appendFormat:@" WHERE %@",where]; 
     } else { 
      [sql appendFormat:@" WHERE 1",where]; 
     }  
     [self runDynamicSQL:sql forTable:table]; 
    } 

    - (void)updateDictionary:(NSDictionary *)dbData forTable:(NSString *)table { 
     [self updateDictionary:dbData forTable:table where:NULL]; 
    } 

    - (void)updateDictionary:(NSDictionary *)dbData forTable:(NSString *)table where:(NSString *)where { 

     NSMutableString *sql = [NSMutableString stringWithCapacity:16]; 
     [sql appendFormat:@"UPDATE %@ SET ",table]; 

     NSArray *dataKeys = [dbData allKeys]; 
     for (int i = 0 ; i < [dataKeys count] ; i++) { 
      if ([[dbData objectForKey:[dataKeys objectAtIndex:i]] intValue]) { 
       [sql appendFormat:@"%@=%@", 
       [dataKeys objectAtIndex:i], 
       [dbData objectForKey:[dataKeys objectAtIndex:i]]]; 
      } else { 
       [sql appendFormat:@"%@='%@'", 
       [dataKeys objectAtIndex:i], 
       [dbData objectForKey:[dataKeys objectAtIndex:i]]]; 
      }  
      if (i + 1 < [dbData count]) { 
       [sql appendFormat:@", "]; 
      } 
     } 
     if (where != NULL) { 
      [sql appendFormat:@" WHERE %@",where]; 
     } 
     [self runDynamicSQL:sql forTable:table]; 
    } 

    - (void)updateSQL:(NSString *)sql forTable:(NSString *)table { 
     [self runDynamicSQL:sql forTable:table]; 
    } 

    - (void)deleteWhere:(NSString *)where forTable:(NSString *)table { 

     NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@", 
         table,where]; 
     [self runDynamicSQL:sql forTable:table]; 
    } 

    // INSERT/UPDATE/DELETE Subroutines 

    - (BOOL)runDynamicSQL:(NSString *)sql forTable:(NSString *)table { 

     int result; 
     //NSAssert1(self.dynamic == 1,[NSString stringWithString:@"Tried to use a dynamic function on a static database"],NULL); 
     sqlite3_stmt *statement; 
     if (statement = [self prepare:sql]) { 
      result = sqlite3_step(statement); 
     }  
     sqlite3_finalize(statement); 
     if (result) { 
      if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(databaseTableWasUpdated:)]) { 
       [delegate databaseTableWasUpdated:table]; 
      } 
      return YES; 
     } else { 
      return NO; 
     } 

    } 

    // requirements for closing things down 

    - (void)dealloc { 
     [self close]; 
     [delegate release]; 
     [super dealloc]; 
    } 

    - (void)close { 

     if (dbh) { 
      sqlite3_close(dbh); 
     } 
    } 

    @end 
1

私はより一般的なソリューションのRealmを使用することをお勧めします。

0
// Create Database file 

- (void)createEditableCopyOfDatabaseIfNeeded 
{ 
    // First, test for existence. 
    BOOL success; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSLog(@"%@",documentsDirectory); 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"TestDB.sqlite"]; 
    success = [fileManager fileExistsAtPath:writableDBPath]; 
    if (success) return; 

    // The writable database does not exist, so copy the default to the appropriate location. 

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TestDB.sqlite"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
    if (!success) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    } 
} 
+0

このコードは質問に答えるかもしれませんが、なぜ、そして/またはどのように質問に答えるかに関する追加的な文脈を提供すると、 答えを編集して説明を追加してください。 – gevorg

1

iPhoneにアプリケーションデータを保存する方法はいくつかあります。

  1. のplistファイル
  2. NSUserDefaults
  3. UserDefault
  4. ファイルシステム
  5. CoreData
  6. SQLiteのDB
関連する問題