2013-06-22 2 views
0

Я прочитал все похожие вопросы и пробовал все предложения, все еще ничего. Может, кто-то может заметить мой недостаток.UITableView reloadData не работает

Контроллер моего представления инициируется с другого контроллера вида с помощью одной из двух кнопок. Кнопка краны отправить NSNotification (с вложенными массивами), и этот вид контроллер ожидает это уведомление, а затем вызывает этот метод:

- (void)addContentToArray:(NSNotification *)aNotification { 

    array = [NSArray arrayWithArray:[aNotification object]]; 

    ([array count] == 6) ? (category = YES) : (category = NO); 

    [myTableView reloadData]; 
    NSLog(@"%d", [array count]); 
    NSLog(@"%@", myTableView); 
} 

метод вызывается каждый раз, когда я вижу, что от изменения счетчика массива. Здесь объект уведомления - это массив, переданный из предыдущего контроллера представлений, и я назначаю эти объекты своему свойству локального массива - это мой источник UITableView. Поэтому я пытаюсь повторно использовать UITableView для отображения элементов любого массива. И он отлично работает для первого переданного массива (в зависимости от того, что первым).

Когда я нажимаю вторую кнопку, новый массив успешно передается (как упоминалось ранее, я знаю, что из журнала [array count], который отличается: 3 против 6 объектов в разных массивах). Однако то, что не происходит, это то, что UITableView не обновляется (хотя значения, переданные при выборе строки в таблице, относятся к правильным массивам, хотя отображаются неправильные значения).

Вот UITableView методы источника данных:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return [array count]; 
} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"]; 
    } 

    cell.textLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"name"]; 

    if (category) { 
     cell.detailTextLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"description"]; 
    } 

    return cell; 
} 

Итак, что я делаю неправильно?

Несколько других соображений, которые могут помочь:

  • NSLog (@ "% @", myTableView); возвращает (null), что немного беспокоит. myTableView здесь - UITableView из моего файла nib, который правильно подключен к контроллеру представления, объявлен как свойство и синтезирован
  • Контроллер вида, о котором идет речь, является правым элементом управления изображением PKRevealController, поэтому, когда он вызывается повторно, вызывается метод viewWillAppear, но не viewDidLoad (хотя, как я уже упоминал, addContentToArray: метод также вызывается каждый раз)
  • Кроме того, для тех, кто знаком с PKRevealController - когда я пытаюсь запустить журнал focusController с моего контроллера представления, он говорит, что frontViewController - тот, который движется, чтобы открыть мой контроллер представления, - это тот, который сфокусирован. Может быть, это причина, по которой myTableView (null)?

Я был бы благодарен за понимание и помощь!

+0

ли Вы забыли установить yourtabledelegate самостоятельно из XIb или от coading , – Swapnil

+0

Привет @Swapnil, я этого не сделал. Контроллер моего представления указывается как источник данных, делегат и выход для UITableView – artooras

+0

'NSLog (@"% @ ", myTableView);' return (null) означает, что что-то определенно неверно. Вы уверены, что у вас '@synthensize myTableView = myTableView' в файле .h? –

ответ

0

мне удалось решить проблему путем изменения метода initWithNibName (старая линия закомментирована)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    self = [super initWithNibName:@"PurposeCategoryViewController" bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

Видимо, это было что-то делать с тем, что мой взгляд контроллер (так называемый PurposeCategoryViewController) не был топ/focus view в иерархии PKRevealController. Итак, мне просто нужно было конкретно указать мой файл nib.

0

Нужно больше кода, той части, где вы создали, и позвоните по телефону MyviewcontrolleraddContentToArray. Я думаю, вы использовали код выпуска для объекта Myviewcontroller, попробуйте один раз скрыть эту часть.

+0

Все, что я сделал, это подписка на получение уведомлений в viewDidLoad следующим образом: [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (addContentToArray :) name: @ "цельOrCategory" object: nil]; поэтому метод вызывается каждый раз – artooras

0

Какое значение вы возвращаетесь в этом методе делегата: - (NSInteger) numberOfSectionsInTableView: (UITableView *) Tableview убедитесь, что 1

+0

Это не 1, а [количество массивов], поэтому оно равно 3 или 6, в зависимости от содержимого массива – artooras

Смежные вопросы