2016-07-01 3 views
0

У меня есть изменяемый массив {arrayname == colA} с 16 объектами, я хочу получить доступ к этим элементам индивидуально и хочу поместить его в ярлык в tableviewcell, я сделал все и умею для доступа к данным, но в конце концов он показывает ошибку «Нагрузочное приложение из-за неперехваченное исключение«NSRangeException»...Доступ к данным из измененного массива

кода Я сделал это:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     EasyTamilTeacherTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
      easyTamil = [colA objectAtIndex:indexPath.row]; 
      cell.inputLabel.text = easyTamil; 
     } 
     return cell; 
} 
+1

Показать сообщение об ошибке ENTIERE. Я не понимаю 'for loop'. – Larme

+0

Показать сообщение об ошибке полностью. – user3182143

+0

colA, похоже, содержит массивы, но ваше сообщение об ошибке предполагает, что оно не содержит достаточно элементов. – Eiko

ответ

2

Довольно основной:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    EasyTamilTeacherTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
// Other cell settings 

cell.inputLabel.text= [colA objectAtIndex:indexPath.row]; 

return cell; 
} 
+0

Не рекомендуется добавлять вручную подвью к 'UITableViewCell', поскольку они повторно используются.Кроме того, если это уже пользовательский 'UITableViewCell', он должен иметь свойство метки. – Larme

+0

@ Larme: Согласен. Отредактировал ответ. – Nitish

+0

Это совершенно другая логика, чем то, что делает @Muthukumar. Вы устанавливаете текст в массив. – Eiko

0

Проверить для метода datasource верните количество строк в секции правильно. он должен возвращать количество источников данных.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
     return colA.count; 
} 
0

Этот код работает отлично

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     EasyTamilTeacherTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

     easyTamil = colA[indexPath.row]; 
     cell.inputLabel.text=easyTamil; 
     return cell; 
    } 
+0

Кажется, массив имел строки как объекты. – Nitish

0

Убедитесь, что вы добавляете NSSString в NSMutableArray.
Если вы храните вашу строку в объект и добавить этот объект в NSMutableArray, то

object = [colA objectAtIndex:indexPath.row]; // return you object 

получить значение строки из object и передать его на этикетке.

cell.inputLabel.text = object.myLabel; 

Пожалуйста, сообщите об ошибке. Нам будет легко дать вам правильный ответ.

0

любезно попробовать

  1. Casting модели данных (если модель данных есть) еще проверить ключ => значения существует, которые вы хотите получить доступ к
  2. Контрольного значения является действительным. попробуйте использовать, если пусть для обеспечения значения есть перед установкой его маркировать

    let indexPath = NSIndexPath(forItem: 0, inSection: 0) 
    let array : NSMutableArray = NSMutableArray(array: [NSDictionary()]) 
    if array.count > indexPath.row{ 
        if let dictionary = array[indexPath.row] as? NSDictionary{ 
         if let name = dictionary.valueForKey("KeyDoesn't Exist") as? String{ 
          print("name == >>", name) 
          //set name 
         } 
        } 
    } 
    
+0

** if array.count> indexPath.row ** разрешит проблему исключения NSRangeException, которая будет возникать при попытке доступа к объекту за пределами массива. –

0

Примечание: - Есть два способа UITableView делегата используется, не забудьте связать Datasource и делегата.

После этого примените этот: - @interface SecondVC: UIViewController < UITableViewDelegate, UITableViewDataSource>

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


return mutArrMessages.count; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 
cell.lblMessage.text = mutArrMessages[indexPath.row] 
return cell; 
} 
Смежные вопросы