2012-02-15 6 views
1

私はカートに製品を保存する必要があるアプリを開発する必要があります。また、最後の最初の並べ替えの方法で最近の注文を取得する必要があります。
plistまたはSQLiteデータベースを使用してデータを保存する最善の方法はどれですか?保守が容易であるので、私は最善の方法は、あなたが最後の5つのたびにiPhoneのストレージ

答えて

1

私はこのタイプのアプリケーションを作成します。このアプリケーションでは、.plistファイルではなく操作しやすいようにSqliteデータベースを使用します。

以下は、アイテムをDBに挿入するためのコードの一部です。あなたが任意のクエリを持っている場合(NSArrayの*)arItem {

sqlite3_stmt *compiledStmt; 
    if(sqlite3_open([self.dbPath UTF8String], &database) ==SQLITE_OK) { 


     sqlite3_prepare_v2(database, "BEGIN TRANSACTION", -1, &compiledStmt, NULL); 
     sqlite3_step(compiledStmt); 
     sqlite3_finalize(compiledStmt); 

     const char *sqlInsertQry="insert into CartDetails (id,cat_id,KD,item,qty,calories,ar_name) values(?,?,?,?,?,?,?)"; 
     if(sqlite3_prepare_v2(database, sqlInsertQry, -1, &compiledStmt, NULL) == SQLITE_OK){ 
      for (NSDictionary *dObj in arItem) { 
       PUT_Integer(1,@"id"); 
       PUT_Integer(2,@"Cat_Id"); 
       PUT_Double(3,@"KD"); 
       PUT_Value(4,@"item"); 
       PUT_Integer(5,@"qty"); 
       PUT_Value(6,@"calories"); 
       PUT_Value(7,@"ar_name");     

       NSUInteger err = sqlite3_step(compiledStmt); 
       if (err != SQLITE_DONE){ 
        NSLog(@"error while binding %d %s",err, sqlite3_errmsg(database)); 
       } 
       sqlite3_reset(compiledStmt); 
      } 
      sqlite3_finalize(compiledStmt);  
     } else { 
      NSLog(@"Invalid Query"); 
     } 
     sqlite3_prepare_v2(database, "END TRANSACTION", -1, &compiledStmt, NULL); 
     sqlite3_step(compiledStmt); 
     sqlite3_finalize(compiledStmt); 
     sqlite3_close(database); 
    } else { 
     NSLog(@"error while opening database."); 
    } 
} 

:(空)のInsertItem -

初期データベース

-(id)init{ 
    if(self=[super init]) { 
     documentsDirectory_Statement; 
     documentsDirectory=[documentsDirectory stringByAppendingPathComponent:@"DietCenter.rsd"]; 
     self.dbPath=documentsDirectory; 
     NSFileManager *fm=[NSFileManager defaultManager]; 
     if(![fm fileExistsAtPath:self.dbPath]) { 
      NSString *localDB=[[NSBundle mainBundle] pathForResource:@"DietCenter" ofType:@"rsd"]; 
      NSError *err; 
      if(![fm copyItemAtPath:localDB toPath:self.dbPath error:&err]){ 
       NSLog(@"Error in creating DB -> %@",err); 
      } 
     } 

     if(sqlite3_open([self.dbPath UTF8String], &database) !=SQLITE_OK){ 
      NSLog(@"error while opening database."); 
     } else { 
      sqlite3_close(database); 
     } 
    } 
    return self; 
} 

同意が

#define PUT_Value(_TO_,_FROM_) { \ 
     NSString *str=[dObj valueForKey:_FROM_]; \ 
     if(!str) [email protected]" "; \ 
     sqlite3_bind_text(compiledStmt,_TO_,[str UTF8String],-1,SQLITE_TRANSIENT); \ 
    } 

    #define PUT_Integer(_TO_,_FROM_) { \ 
     NSInteger numbr=[[dObj valueForKey:_FROM_] intValue]; \ 
     sqlite3_bind_int(compiledStmt,_TO_,numbr); \ 
    } 


    #define PUT_Double(_TO_,_FROM_) { \ 
    CGFloat doubleX=[[dObj valueForKey:_FROM_] floatValue]; \ 
    sqlite3_bind_double(compiledStmt,_TO_,doubleX); \ 
    } 



    #define GET_Value(_TO_,_FROM_) NSString *_TO_; { \ 
    const unsigned char *c=sqlite3_column_text(compiledStmt,_FROM_); \ 
    _TO_= c ? [NSString stringWithUTF8String:(char*)c] : @"" ; \ 
    } 

    #define GET_Double(_TO_,_FROM_) double _TO_;{ \ 
    _TO_=sqlite3_column_double(compiledStmt,_FROM_); \ 
    } 

    #define GET_Integer(_TO_,_FROM_) NSUInteger _TO_; { \ 
    _TO_ = sqlite3_column_int(compiledStmt,_FROM_); \ 
    } 

挿入値機能 値これに関連して私に助けてください助けてください

おかげで、よろしく、サミュエル・返信用

1

は常にアプリで使用するための良い選択です。使用できるもう1つのオプションは、コアデータ機能です。

+0

おかげ@

... – nithin

0

SQLiteにも変更されます言ったように、それ以降のデータベースに保存することだと思います

関連する問題