2012-06-19 1 views
0

я использую: самостоятельно performSelector: @selector (LoadData) withObject: ноль ... это выглядит как работа с некоторой команды только в "LoadData", но отдыхать нет.самостоятельно performSelector: @selector (LoadData) withObject: ноль - не работает

Вот мой viewdidload:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [mActivity startAnimating]; 
    [self performSelector:@selector(loadData) withObject:nil afterDelay:2]; 
    //[mActivity stopAnimating]; 
} 

и вот LoadData:

-(void)loadData 
{ 
    [mActivity startAnimating]; 
    NSLog(@"Start LoadData"); 
    AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSString *selectData=[NSString stringWithFormat:@"select * from k_proverb ORDER BY RANDOM()"]; 
    qlite3_stmt *statement; 
    if(sqlite3_prepare_v2(delegate.db,[selectData UTF8String], -1,&statement,nil)==SQLITE_OK){ 
     NSMutableArray *Alldes_str = [[NSMutableArray alloc] init]; 
     NSMutableArray *Alldes_strAnswer = [[NSMutableArray alloc] init]; 
     while(sqlite3_step(statement)==SQLITE_ROW) 
     { 
      NSString *des_strChk= [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,3)]; 
      if ([des_strChk isEqualToString:@"1"]){ 
       NSString *des_str= [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,4)]; 
       [Alldes_str addObject:des_str]; 
      } 
     } 
     Alldes_array = Alldes_str; 
     Alldes_arrayAnswer = Alldes_strAnswer; 
    }else{ 
     NSLog(@"ERROR '%s'",sqlite3_errmsg(delegate.db)); 
    } 
    listOfItems = [[NSMutableArray alloc] init]; 
    NSDictionary *desc = [NSDictionary dictionaryWithObject: 
          Alldes_array forKey:@"description"]; 
    [listOfItems addObject:desc]; 
    //[mActivity stopAnimating]; 
    NSLog(@"Finish loaData");} 

это дает мне только печать 2 линии, но не загружать свои данные в таблицу, но если я копирую весь код изнутри «loadData» и прошлый в «viewDidLoad», он загружает данные в таблицу.

Любой совет или помощь пожалуйста.

+0

Вы пробовали отлаживать и устанавливать точку прерывания в первой строке в методе 'loadData'? – danielbeard

+0

он может печатать только те 2 строки: NSLog (@ «Запустить LoadData») и NSLog (@ «Finish loaData») , но если я скопирую весь код в «loadData» и перейду в «viewDidLoad» , он покажет мне, таблица с данными – Sunny

ответ

1

Несколько вещей: Если вы вообще видите какой-либо вывод NSLog, тогда выполняется выполнение функции выбора. Вы должны изменить название своего вопроса.

Если вы пытаетесь загрузить данные в таблицу, метод должен заканчиваться сообщением UITableView reloadData (или более сложной нагрузкой с использованием обновлений начала и конца).

Если LISTOFITEMS это данные, поддерживающие таблицы, получить эту работу первым упорным кодирования что-то вроде этого:

-(void)loadData { 

    listOfItems = [NSArray arrayWithObjects:@"test1", @"test2", nil]; 
    [self.tableView reloadData]; 
    return; 

    // keep all of the code you wrote here. it won't run until you remove the return 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSString *string = [listOfItems objectAtIndex:indexPath.row]; 
    cell.textLabel.text = string; 
    return cell; 

    // keep all of the code you probably wrote for this method here. 
    // as above, get this simple thing running first, then move forward 
} 

Удачи!

+0

Код, который я пытаюсь использовать, - это просто загрузить данные в «listOfItems», поэтому вам больше поможет (см. выше «loadData»). – Sunny

+0

Большое вам спасибо. Теперь работает. – Sunny