Как назначить из объекта в ячейку в TableView? - PullRequest
0 голосов
/ 15 марта 2012

В моем приложении iphon я читаю из sqlite db в NSMutableArray * sales и хочу назначить данные по продажам в ячейку в TableView. Как я могу это сделать?

Вот мой код: В контроллере:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *result = nil;
    if ([tableView isEqual:self.myTableView]){
      static NSString *TableViewCellIdentifier = @"MyCells";
      result = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier];
      if (result == nil){
        result = [[UITableViewCell alloc]
                  initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier:TableViewCellIdentifier];
       }

    AppDelegate *appDelegate = ( AppDelegate *)[[UIApplication sharedApplication] delegate];

    [appDelegate readSalesFromDatabase]; 

    // ***here is where I'm trying to retrive the data*** 
    // when I run the simulator, at this point I receive 'SIGABRT'
   =====>    result = [sales objectAtIndex:indexPath.row]; 
    }
    return result; 
}

В делегате:

-(void) readSalesFromDatabase {

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access

          const char *sqlStatement = "select us.userID from UsersSale us  order by us.saleID";        


    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        // Loop through the results and add them to the feeds array
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            // Read the data from the result row
            NSInteger auserID = sqlite3_column_int(compiledStatement, 0); 

            // Create a new  Sale object with the data from the database                
            SelectFromList *sfl  = [[SelectFromList alloc] initWithName:auser];                                        

            // ***here is where I'm inserting the data to NSMutableArray *sales ** 
            [selectFromListController.sales insertObject:sfl atIndex:count];  

            [sfl release];

        }
    }
    // Release the compiled statement from memory
    sqlite3_finalize(compiledStatement);

}
sqlite3_close(database);

} @ Конец

1 Ответ

0 голосов
/ 15 марта 2012

Во-первых, рассмотрите возможность вызова '[appDelegate readSalesFromDatabase]' для viewDidLoad или в методе init вашего контроллера представления, поскольку вы вызываете это для каждой представленной строки. Это, вероятно, не то, что вы хотите для производительности.

Во-вторых, вы должны проверить, что находится в массиве 'sales', и убедиться, что в нем есть данные. Если значение indexPath.row превышает размер массива, вероятно, вы не возвращаете фактическое и правильное количество строк в tableView: numberOfRowsInSection: '. В этом случае у вас запрашивают данные, которые могут отсутствовать в вашем резервном хранилище.

Кроме того, вам может потребоваться использовать UITableView не как «назначение данных в ячейку таблицы», а как «возврат данных для конкретной ячейки, которая отображается в данный момент».

...