Хранение в iPhone - PullRequest
       0

Хранение в iPhone

1 голос
/ 15 февраля 2012

Мне нужно разработать приложение, в котором мне нужно хранить продукты в корзине. Также мне нужно извлекать последние заказы последним способом первой сортировки.
Каков наилучший способ хранения данных с использованием plist или база данных SQLite?

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Я создаю приложение такого типа, в котором я использую базу данных Sqlite, для которой легко манипулировать, а не для файла .plist.

Ниже приведено некоторое количество кода для вставки элемента в БД.

База данных инициализации

-(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) str=@" "; \
        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_); \
    }

Функция вставки значения - (void) insertItem: (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.");
    }
}

Если у вас есть какие-либо вопросы, связанные с этим, пожалуйста, скажите мне, что я помогу вам

Спасибо и С уважением,

@ Самуэль

1 голос
/ 15 февраля 2012

Я думаю, что лучший способ - это сохранить в базе данных, поскольку, как вы сказали, последние пять будут меняться каждый раз

0 голосов
/ 15 февраля 2012

Sqlite - это всегда хороший выбор для использования в приложении, потому что его легко поддерживать.еще одна опция, которую вы можете использовать, - это функциональность основных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...