Ich arbeite an meiner ersten Objective-C-App für iOS und habe ein Problem mit dem Neuladen der Daten in einem UITableView.iOS UITableView lädt nur Zellendaten beim Scrollen
Nach dem erneuten Laden der Daten wird der Zelleninhalt nur aktualisiert, wenn die Zelle oberhalb des sichtbaren Bereichs des Containers verschoben wird.
Hier ist mein .h Code:
#import <UIKit/UIKit.h>
#import "AFHTTPClient.h"
#import "AFJSONRequestOperation.h"
@interface HelloWorldViewController : UIViewController <UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource>{
NSMutableArray *tableViewArray;
IBOutlet UITableView *tableView;
}
@property (nonatomic, retain) NSMutableArray *tableViewArray;
@property (weak, nonatomic) IBOutlet UILabel *connectionLabel;
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UITextView *textArea;
@property (weak, nonatomic) IBOutlet UITextField *textField2;
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (copy, nonatomic) NSString *userName;
@property (copy, nonatomic) NSString *passWord;
@property (copy, nonatomic) NSMutableString *serverResponse;
- (IBAction)callHome:(id)sender;
@end
und .m Code:
#import "HelloWorldViewController.h"
@interface HelloWorldViewController()
@end
@implementation HelloWorldViewController
@synthesize tableViewArray;
@synthesize connectionLabel;
@synthesize userName = _userName;
@synthesize passWord = _password;
@synthesize serverResponse = _serverResponse;
@synthesize tableView;
@synthesize textArea;
@synthesize textField2;
@synthesize label;
@synthesize textField;
- (void)viewDidLoad
{
[super viewDidLoad];
tableViewArray = [[NSMutableArray alloc] init];
[tableViewArray addObject:@"TEST1"];
[tableViewArray addObject:@"TEST2"];
[tableViewArray addObject:@"TEST3"];
}
- (void)viewDidUnload
{
[self setTextField:nil];
[self setLabel:nil];
[self setTextField2:nil];
[self setTextArea:nil];
[self setTableView:nil];
[self setConnectionLabel:nil];
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textField) {
[theTextField resignFirstResponder];
}
return YES;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [tableViewArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = [self.tableViewArray objectAtIndex: [indexPath row]];
return cell;
}
- (IBAction)callHome:(id)sender {
self.userName = self.textField.text;
self.passWord = self.textField2.text;
NSMutableString *tempResponse = [[NSMutableString alloc] initWithFormat:@""];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://example.com/"]];
[client setAuthorizationHeaderWithUsername:self.userName password:self.passWord];
[client getPath:@"login.do" parameters:nil
success:^(AFHTTPRequestOperation *operation , id responseObject){
NSLog(@"Authentication Success: %d", operation.response.statusCode);
self.serverResponse = [NSMutableString stringWithFormat:@"Authentication Success: %d", operation.response.statusCode ];
[tempResponse appendString: self.serverResponse];
self.textArea.text = tempResponse;
}
failure:^(AFHTTPRequestOperation *operation , NSError *error){
NSLog(@"Authentication Error: %@\n%@", error, operation);
}
];
[client getPath:@"test.json.do" parameters:nil
success:^(AFHTTPRequestOperation *operation , id responseObject){
NSLog(@"Retrieval Success: %d", operation.response.statusCode);
NSDictionary *results = [operation.responseString JSONValue];
NSMutableArray *buildings = [results objectForKey:@"buildings"];
NSMutableArray *names = [[NSMutableArray alloc] init];
for (NSDictionary *building in buildings)
{
[names addObject:[building objectForKey:@"name"]];
}
self.tableViewArray = names;
self.serverResponse = [NSMutableString stringWithFormat:@"\nBuilding List Retrieval Success: %d", operation.response.statusCode ];
[tempResponse appendString: self.serverResponse];
self.connectionLabel.text = tempResponse;
}
failure:^(AFHTTPRequestOperation *operation , NSError *error){
NSLog(@"Retrieval Error: %@\n%@", error, operation);
}
];
NSLog(@"tableView is: %@", [tableView description]);
[tableView reloadData];
}
@end
Als ich [self.tableView description]
nennen das Ergebnis null ist, aber wenn ich es aus cellForRowAtIndexPath
rufen dann bekomme ich die folgendes Ergebnis:
tableView is: <UITableView: 0x8a71000; frame = (0 0; 280 191); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x6b7e860>; contentOffset: {0, 0}>. Delegate: HelloWorldViewController, DataSource: HelloWorldViewController
Hier ist ein Screenshot des Interface Builders:
Alle Hilfe ist willkommen! Vielen Dank!
Ich habe einen Screenshot von Interface Builder hinzugefügt. Ich ziehe die Strg-Taste von der markierten Tabellenansicht zum Hello World View Controller. Danke nochmal ... – kevinstueber