Ich versuche Anzeigezellen in einem UITableView
aber neu hinzugefügten Zellen werden nicht angezeigt, es sei denn, viewDidLoad
verwendet wird.UITableView Objective-C bevölkert nicht richtig
Dies ist die vollständige Liste: Wenn ich zum New Note
Bildschirm gehen und kommen zurück, das ist in Ordnung, aber wenn dieser Bildschirm verschwinden die Notiz Titel von der Seite Menü zugegriffen wird New
, bis ich auf die New Note
klicken Knopf und komm zurück.
Unten ist der Code für diese Seite:
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *leftButtonsArray = [self.navigationItem.leftBarButtonItems mutableCopy];
UIBarButtonItem *newNoteButton = [[UIBarButtonItem alloc] initWithTitle:@"New Note" style:UIBarButtonItemStyleBordered target:self action:@selector(addNote:)];
[leftButtonsArray addObject:newNoteButton];
self.navigationItem.leftBarButtonItems = leftButtonsArray;
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.notes = [NSMutableArray array];
ontracAppDelegate *delegate = (ontracAppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = [delegate managedObjectContext];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Notes"];
[request setReturnsObjectsAsFaults:NO];
NSError *error = nil;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"updated" ascending:NO];
[request setSortDescriptors:@[sortDescriptor]];
NSArray *results = [moc executeFetchRequest:request error:&error];
NSSortDescriptor *sd = [[NSSortDescriptor alloc] initWithKey:@"updated" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sd];
NSArray *sortedArray = [results sortedArrayUsingDescriptors:sortDescriptors];
NSNumber * NOTEID = @"noteID";
NSString * PACKID = @"pack_id";
NSString * NOTE = @"note";
NSString * CREATED = @"created";
NSString * UPDATED = @"updated";
NSDictionary * dict;
[self.notes removeAllObjects];
for(Notes *note in results){
if(self.dataObject.pack_id == [note.dataObject.dataPack.pack_id integerValue]){
dict = [NSDictionary dictionaryWithObjectsAndKeys:
note.noteID, NOTEID,
note.pack_id, PACKID,
note.note, NOTE,
note.created, CREATED,
note.updated, UPDATED,
nil];
if((note.created == nil || note.updated == nil || note.noteID == nil)){
[moc deleteObject:note];
}else{
[self.notes addObject:dict];
}
}
}
NSLog(@"mArray %@", self.notes);
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
NSLog(@"notes count: %lu", (unsigned long)[self.notes count]);
return [self.notes count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"myCell"];
}
NSMutableDictionary *d = [self.notes objectAtIndex:indexPath.row];
//NSNumber *noteID = [d valueForKey:@"noteID"];
NSString *note = [d valueForKey:@"note"];
NSString *created = [d valueForKey:@"created"];
NSString *updated = [d valueForKey:@"updated"];
cell.textLabel.text = note;
cell.detailTextLabel.text = [NSString stringWithFormat:@"Date Created: %@ | Last Updated %@", created, updated];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableDictionary *d = [self.notes objectAtIndex:indexPath.row];
NSNumber *noteID = [d valueForKey:@"noteID"];
NID = noteID;
ontracSuperClassViewController *viewController = [[ontracNotesViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
}
-(IBAction)addNote:(id)sender{
NID = [NSNumber numberWithInteger:-1];
ontracSuperClassViewController *viewController = [[ontracNotesViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
Nach 'NSLog (@ "Marray% @", self.notes);', 'tun [ yourTableView reloadData]; ', oder verwenden Sie einen' NSFetchedResultsController'? – Larme
wie Sie sagen, Sie haben eine neue Notizen im neuen Viewcontroller dann nsnotificationcenter addobserver und rufen Sie diese Methode von neuen Viewcontroller und aktualisieren Sie Ihr Array mit neuen Wert und Tabelle neu laden –
Wenn U zum zweiten View-Controller geschoben, was verwenden Sie, um zurück zu bekommen Hier ? –