iPhone: проблема с методом TableView cellForRowAtIndexPath

#iphone

#iPhone

Вопрос:

Я столкнулся с проблемой сбоя в методе делегирования tableview cellForRowAtIndexPath cellForRowAtIndexPath

 @interface EventListView : UIViewController <UITableViewDelegate, UITableViewDataSource> 

IBOutlet UITableView *tblView;
NSMutableArray  *arr_EventValues,*arr_Event_Details;
NSMutableArray  *arr_EventListDetails;

@property(nonatomic, retain)NSMutableArray *arr_EventValues,*arr_EventListDetails, *arr_Event_Details; 
@property(nonatomic, retain)UITableView *tblView;

- (void)viewDidLoad  
{
     appdelegate = (VibesGuideAppDelegate *)[[UIApplication sharedApplication] delegate];
     ViewCalendar = [[CalendarView alloc] initWithNibName:@"CalendarView" bundle:[NSBundle mainBundle]];
     [self.navigationController.navigationBar setHidden:YES];
     self.arr_Event_Details = [[NSMutableArray alloc] init]; 
     self.arr_EventValues = [[NSMutableArray alloc] init];
     [super viewDidLoad];
}

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
     return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     if ([self.arr_EventListDetails count] > 0)
     {
         return [self.arr_EventListDetails count];
     }
    return 0;
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    // ------------------------------- Custom cell ------------------------------
    Customcell  *cell = (Customcell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

     cell = [[[Customcell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

     cell.textLabel.text = @"Hello";    
     return cell;
 }
  

* -[EventListView TableView:cellForRowAtIndexPath:]: сообщение отправлено освобожденному экземпляру 0x60e01b0 и я использовал tableview из xib и установил все соединения, а также получил значения массива в numberOfRowsInSection в методе, но в cellForRowAtIndexPath метод не вызывается, поэтому, пожалуйста, дайте мне представление о моей проблеме….

Заранее спасибо.

Комментарии:

1. я думаю, что вы выпускаете некоторые, где ваш объект

2. нет, я не выпускаю объект, так что есть идеи??

3. разместите свой код здесь, затем мы его проверим

4. если вы используете пользовательскую ячейку, почему вы пишете их cell.textLabel.text, используя свою пользовательскую метку. это создает проблему. и использовать пользовательскую ячейку для записи

5. установите делегат и источник данных для вашего tableview. Поскольку вы используете его из того же класса. Установите для них значение self

Ответ №1:

Сначала кажется, что ваша некоторая переменная освобождается. Убедитесь, что вы правильно выделили его. Если вы объявили @property для него, вам лучше использовать переменную как self.variable . Вы можете использовать retain и в случае IOS 5 strong в объявлении свойства.

Просто чтобы быть уверенным, что вы можете отслеживать, освобождается ли какая-либо переменная, установив NSZombieEnabled значение YES . При включенном «зомби» сообщения для освобожденных объектов больше не будут вести себя странно или аварийно завершаться трудными для понимания способами, а вместо этого будут регистрироваться в журнале и умирать предсказуемым способом, определяемым отладчиком. Вы можете установить NSZombieEnabled, выполнив следующие шаги.

Выберите продукт в строке меню выше. Удерживайте нажатой клавишу alt / option и выберите «Проверить …» или «Выполнить …». Перейдите на вкладку Аргументы и добавьте NSZombieEnabled YES в разделе «Переменные среды».

Ответ №2:

Ваш сам tableview уже выпущен — в сообщении об ошибке говорится, что вы отправляете сообщение cellForRowAtIndexPath освобожденному экземпляру табличного представления — так что ваша проблема заключается где-то в том, что вы не сохраняете или не выпускаете EventListView, и его нельзя увидеть в коде, отображаемом здесь.

Ответ №3:

Проверьте это:

Источник данных таблицы и делегат установлены или нет. Используемый массив в cellForRowAtIndexPath правильно задан с помощью свойства и синтезирован, а также используется с self . Имя.

Ответ №4:

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

  Customcell  *cell = (Customcell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

 if(cell == nil)
 {
     cell = [[[Customcell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
 }
  

исправьте это и дайте мне знать, если у вас все еще возникает та же проблема.