создать массив словарей из sqlite DB с помощью FMDB - PullRequest
1 голос
/ 21 февраля 2012

Я новичок в target-c и пытаюсь создать массив словарей, чтобы просмотреть их в NSTableView с тремя столбцами.схема БД sqlite также имеет три столбца: «foo», «bar» и «foobar» в таблице с именем «tbl1».Я использую FMDB в качестве оболочки, и я могу писать и успешно запрашивать.

я могу создать массив для всей БД с помощью этого:

FMResultSet *rs = [db executeQuery:@"select * from tbl1"];

, и я могу создать словарь с этим:

dict = [[NSMutableDictionary alloc] init];
[dict setObject: @"baz"        
      forKey: @"foo"];

для чтения каждого элемента вDB работает:

while ([rs next]) {
    NSLog(@"%@, %@, %@", 
          [rs stringForColumn:@"foo"],
          [rs stringForColumn:@"bar"],
          [rs stringForColumn:@"foobar"]);
    }

, однако я не могу создать отдельный массив NSMutableDictionaries, поэтому я могу читать их в табличном представлении на основе ячеек.я смог заполнить один столбец с идентификатором "foo" значениями для "foo", однако это было просто путем создания массива элементов "foo" из запроса SQL:

FMResultSet *rs = [db executeQuery:@"select * from tbl1"];
    while([foo next]) {
        NSString *thisFoo = [foos stringForColumn:@"foo"];        
        [_foos addObject:[NSString stringWithFormat:@"%@", thisFoo]];
    }
    NSLog(@"Foos: %@", _foos);

в качестве примечания, я должен использовать изменяемые массивы и изменяемые словари, если я хочу обновить БД позже?или это не имеет значения, так как мне нужно было бы запросить всю БД, чтобы обновить представление таблицы в любом случае?приветствуются любые предложения о том, как заполнить табличное представление с тремя столбцами SQL-базой данных с тремя столбцами, а также исправления моего понимания FMDB или табличных представлений.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012
FMResultSet *rs = (FMResultSet*)[db executeQuery:@"select * from tbl1"];
NSMutableArray *totalArray = [[[NSMutableArray alloc]init]autorelease];
while ([rs next]) {
dict = [[NSMutableDictionary alloc] init];
[dict setObject:[rs stringForColumn:@"foo"] forKey:@"COL1"];
[dict setObject:[rs stringForColumn:@"bar"] forKey:@"COL2"];
[dict setObject:[rs stringForColumn:@"foobar"] forKey:@"COL3"];
[totalArray addObject:dict];
[dict release];
}
return totalArray;

должен дать вам массив словарей

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

Рик, твой вопрос не имеет особого смысла для меня.Пожалуйста, отредактируйте его, чтобы четко указать, в чем именно заключается ваша проблема.

Для FMDB пройдите приведенный здесь пример кода: https://github.com/ccgus/fmdb/zipball/master

Прочитайте документацию Apple по протоколу NSTableViewDelegate здесь: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html

Этот пример кода: https://developer.apple.com/library/mac/#samplecode/CocoaTipsAndTricks/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010039 также должен помочь.

...