2015-05-31 3 views
2

Когда я прокручиваю вниз в своей таблице, некоторое содержимое ячеек исчезает (метки и изображения). Мой код:Ячейки исчезают при прокрутке вниз в моем UITableView

-(void)viewWillAppear:(BOOL)animated{ 
    [comentarios removeAllObjects]; 

    NSString *lookup=[NSString stringWithFormat:@"http://my.url"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:lookup]]; 
    [request setHTTPMethod:@"GET"]; 
    NSError *error = nil; NSURLResponse *response = nil; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSMutableArray *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
    NSLog(@"%@",jsonDict); 

    for (int i=0; i<[jsonDict count]; i++) { 
     Comentario *come=[[Comentario alloc] init]; 
     come.nick=[[jsonDict objectAtIndex:i] objectForKey:@"nick"]; 
     come.comment=[[jsonDict objectAtIndex:i] objectForKey:@"content"]; 
     come.avatar=[[jsonDict objectAtIndex:i] objectForKey:@"color"]; 
     [comentarios addObject:come]; 
    } 
    [self reloadInputViews]; 
    [self.comentariosTableView reloadData]; 
} 

и

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

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // Configure the cell... 
    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; 
    } 

    // Display recipe in the table cell 
    UIImageView *avatar = (UIImageView *)[cell viewWithTag:100]; 
    avatar.image = [UIImage imageNamed:[[comentarios objectAtIndex:indexPath.row] avatar]]; 

    UILabel *nick = (UILabel *)[cell viewWithTag:101]; 
    nick.text =[[comentarios objectAtIndex:indexPath.row] nick]; 

    UILabel *comment = (UILabel *)[cell viewWithTag:102]; 
    comment.text = [[comentarios objectAtIndex:indexPath.row] comment]; 

    UIButton *sinvoto = (UIButton *)[cell viewWithTag:103]; 

    UIButton *ticket = (UIButton *)[cell viewWithTag:104]; 

    return cell; 
} 

Я не могу увидеть ошибку, пожалуйста, помогите мне. Спасибо заранее

EDIT Nª1 просто изменил эту

ViewController.m

#import "ViewController.h" 
#import "SimpleTableCell.h" 

@interface ViewController(){ 
    NSMutableArray *comentarios; 
} 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.comenatrioTableView.delegate=self; 
    self.comenatrioTableView.dataSource=self; 
    self.automaticallyAdjustsScrollViewInsets = NO; 
    UIImage *plus=[[UIImage imageNamed:@"megafono.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithImage:plus style:UIBarButtonItemStylePlain target:self action:@selector(comenta:)]; 
    self.navigationController.navigationBar.barTintColor=[UIColor colorWithRed:204.0/255.0 green:0.0/255.0 blue:00.0/255.0 alpha:1.0f]; 
    comentarios=[[NSMutableArray alloc] init]; 
    [self reloadInputViews]; 
} 

-(void)viewWillAppear:(BOOL)animated{ 
    [comentarios removeAllObjects]; 
    NSString *lookup=[NSString stringWithFormat:@"http://myURL"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:lookup]]; 
    [request setHTTPMethod:@"GET"]; 
    NSError *error = nil; NSURLResponse *response = nil; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSMutableArray *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
    NSLog(@"%@",jsonDict); 

    for (int i=0; i<[jsonDict count]; i++) { 
     Comentario *come=[[Comentario alloc] init]; 
     come.nick=[[jsonDict objectAtIndex:i] objectForKey:@"nick"]; 
     come.comment=[[jsonDict objectAtIndex:i] objectForKey:@"content"]; 
     come.avatar=[[jsonDict objectAtIndex:i] objectForKey:@"color"]; 
     [comentarios addObject:come]; 
    } 
    [self reloadInputViews]; 
} 

-(void)viewDidAppear:(BOOL)animated{ 

} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [comentarios count]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 110; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableCell"; 
    SimpleTableCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath]; 
    Comentario *comentario=[[Comentario alloc] init]; 
    comentario =[comentarios objectAtIndex:indexPath.row]; 

    cell.avatar.image=[UIImage imageNamed:[comentario avatar]]; 
    cell.nick.text=[comentario nick]; 
    cell.comment.text =[comentario comment]; 
    return cell; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
} 

-(void)comenta:(id)sender{ 
    [self performSegueWithIdentifier:@"goComment" sender:self]; 
} 

@end 

и ViewController.h

#import <UIKit/UIKit.h> 
#import "Comentario.h" 

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> 

@property (weak, nonatomic) IBOutlet UITableView *comenatrioTableView; 

@end 

Редактировать Nª3 proble я когда я прокручиваю вниз, информация о ячейках становится нулевой, но у массива comentarios есть информация.

Редактировать Nª4 здесь проект https://github.com/QuimeraKoke/BANG-

+0

Возможно, ник и аватар в вашем «Comentario» равен нулю. – Bannings

+0

Вы проверили мой ответ im, ожидающий вашего ответа –

+0

Да, на самом деле, прежде чем прокрутка вниз станет нулевой – QuimeraKoke

ответ

2

У меня есть еще несколько предложений, которые улучшат ваш код.

Вы должны вызвать супер в viewDidAppear и viewWillAppear методы:

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:YES]; 
} 

Вместо использования:

Comentario *comentario = [[Comentario alloc] init]; 
comentario = [comentarios objectAtIndex:indexPath.row]; 

с:

Comentario *comentario = [comentarios objectAtIndex:indexPath.row]; 

Наконец, вы должны проверить DataSource:

for (int i=0; i<[jsonDict count]; i++) { 
    Comentario *come = [[Comentario alloc] init]; 
    come.nick = [[jsonDict objectAtIndex:i] objectForKey:@"nick"]; 
    come.comment = [[jsonDict objectAtIndex:i] objectForKey:@"content"]; 
    come.avatar = [[jsonDict objectAtIndex:i] objectForKey:@"color"]; 
    [comentarios addObject:come]; 

    NSLog(@"nick = %@, comment = %@, avatar = %@", come.nick, come.comment, come.avatar); 
} 

EDIT:

Вместо использования:

@interface Comentario : NSObject 

@property (weak,nonatomic) NSString *nick; 
@property (weak,nonatomic) NSString *comment; 
@property (weak,nonatomic) NSString *avatar; 

@end 

вы должны использовать:

@interface Comentario : NSObject 

@property (copy,nonatomic) NSString *nick; 
@property (copy,nonatomic) NSString *comment; 
@property (copy,nonatomic) NSString *avatar; 

@en 

Ваша проблема была решена.

Copy

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

Слабый

слабые похож на сильный за исключением того, что она не будет увеличивать опорную счета на 1. Это не становится владельцем этого объекта, но только держит ссылки на него. Если счетчик ссылок объекта падает до 0, даже , хотя вы все равно можете указывать на него здесь, он будет освобожден из памяти .

Это хороший сайт, чтобы узнать о сильном и слабом для прошивки 5. http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

В дополнении к указанным выше проблемам, ваши препятствия в SimpleTableCell в тоже неверно:
enter image description here

Вы должны пойти в Main.storyboard и проверить его. (В Interface Builder Выберите класс компактной ширины и компактного размера)

1

tableView:cellForRowAtIndexPath: код, который вы используете очень старый.

Я бы предложил создать пользовательский класс UITableViewCell со свойствами для ваших ярлыков, изображений и кнопок.

@interface MyTableViewCell : UITableViewCell 
@property (nonatomic, weak) IBOutlet UILabel *nick; 
@property (nonatomic, weak) IBOutlet UILabel *comment; 
@property (nonatomic, weak) IBOutlet UIImageView *avatar; 
@property (nonatomic, weak) IBOutlet UIButton *sinvoto; 
@property (nonatomic, weak) IBOutlet UIButton *ticket; 
@end 

В раскадровку, установлено, что класс ячейки для пользовательских tableViewCell, и подключить его к IBOutlets этикетки, изображения и кнопки раскадровке клетки. Это избавит вас от необходимости использовать теги.

Изменение dequeueReusableCellWithIdentifier: вызов:

MyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

Это всегда возвращает ячейку, так что вы никогда не будете иметь, чтобы проверить ноль.

Теперь вы можете непосредственно установить свойства ячейки:

cell.avatar.image = [UIImage imageNamed:[[comentarios objectAtIndex:indexPath.row] avatar]]; 
cell.nick.text =[[comentarios objectAtIndex:indexPath.row] nick]; 
cell.comment.text = [[comentarios objectAtIndex:indexPath.row] comment]; 

Update:

Эта линия (связано с изменением клавиатуры) является ненужным и может быть удален:

[self reloadInputViews]; 

Есть ли причина, по которой вы используете UIViewController (с таблицей, которую вы добавили), а не просто u петь UITableViewController?

UITableViewController умеют корректировать свои врезки для учета верхней и нижней решетки (и вы должны установить его automaticallyAdjustsScrollViewInsets в YES).

После создания the changes that Banning suggests, возможно, все в порядке. Я не вижу никакой другой причины, по которой ячейки будут пустыми после прокрутки.

Если это все еще происходит, вы должны опубликовать свой класс Comentario, чтобы мы могли увидеть, влияет ли проблема с этим кодом на сохраненные данные.

+0

Он работает, но не работает вообще-то, первая и последняя ячейки все равно исчезают – QuimeraKoke

+0

Является ли массив 'comentarios' изменен отдельно от viewWillAppear? Можете ли вы обновить свой вопрос и добавить новый код 'tableView: cellForRowAtIndexPath', поэтому мы можем попытаться выяснить, почему у вас будет ячейка без какого-либо содержимого. Возможно, вам придется установить точку останова и проверить объект «Comentario», чтобы узнать, имеет ли он (nil) значения для полей, когда ячейка настроена. –

+0

Да, вы правы, перед тем, как прокрутить Comentario, станет nil, это похоже на то, что я не могу сохранить его после прокрутки. – QuimeraKoke

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