Ich habe versucht, meine eigene App für eine Band meiner Freunde zu erstellen, und ich habe mit der Verwendung einer benutzerdefinierten TableViewCell für Nachrichtenartikel, die auf der Website erscheinen, experimentiert. Mein Hauptziel ist es, alle Daten von der Website zu erhalten, speichern Sie es in einem NSMutableArray, und dann anzeigen, dass in meinem benutzerdefinierten Zellen.
Die App läuft gut, wenn sie die ersten 5-6 Zellen lädt. Wenn ich jedoch anfange zu blättern, stürzt die App ab. Ich habe den Fehler in der cellForRowAtIndexPath:
Methode. Mit GDB habe ich auch herausfinden, dass, nachdem ich meine NSMutableArray Daten erstellen und sobald das Programm ausgeführt wird, nach dem Scrollen, mein Array scheint automatisch freigegeben werden. Ich bin nicht sicher, warum dies geschieht. Hier ist, was ich für meinen Code so weit haben:
In HomeViewController.h:
@interface HomeViewController : UIViewController {
NSArray *results;
NSMutableArray *titles;
NSMutableArray *dates;
NSMutableArray *entries;
}
@property (nonatomic, retain) NSMutableArray *titles;
@property (nonatomic, retain) NSMutableArray *dates;
@property (nonatomic, retain) NSMutableArray *entries;
@end
In HomeViewController.m:
- (void)viewDidLoad {
[super viewDidLoad];
titles = [[NSMutableArray alloc] init];
dates = [[NSMutableArray alloc] init];
entries = [[NSMutableArray alloc] init];
while((i+1) != endIndex){
NSString *curr_title = [[NSString alloc] init];
NSString *curr_date = [[NSString alloc] init];
NSString *curr_entry = [[NSString alloc] init];
//do some character iterations across a string
[titles addObject:curr_title];
[dates addObject:curr_date];
[entries addObject:curr_entry];
[curr_title release];
[curr_date release];
[curr_entry release];
}
}
//weiterer Code hier, entfernt
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"NewsCell";
NewsCell *cell = (NewsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:@"NewsCell"
owner:self options:nil];
// cell = [topLevelObjects objectAtIndex:0];
for(id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (NewsCell *)currentObject;
break;
}
}
}
NSLog(@"%d", indexPath.row);
NSLog(@"%d", titles.count);
cell.cellTitle.text = [titles objectAtIndex:indexPath.row];
cell.datePosted.text = [dates objectAtIndex:indexPath.row];
cell.preview.text = [entries objectAtIndex:indexPath.row];
return cell;
}
Auch hier werden die ersten 5-6 Zellen angezeigt. Sobald ich scrolle, habe ich versucht zu tun po titles
und erhielt diesen Fehler:
Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000009 0x011b309b in objc_msgSend ()
Ich habe versucht, die Arrays in initWithNibName:
aber das scheint nicht viel gebracht zu haben. Ich habe versucht, den gesamten Code in viewDidLoad:
und ruft dann [super viewDidLoad]
und es führte zu den gleichen Ergebnissen. Tut mir leid, dass dies so lang ist, aber ich dachte, dass die Leute meinen Code sehen müssen.