Ich habe versucht, eine statische Tabellenansicht als Einstellungen/Optionen für die Alarmfunktion in meiner App zu verwenden. Ich war in der Lage, verschiedene ViewControllers zu übergeben und Daten zu aktualisieren und Werte zu aktualisieren.UITableViewCell detailTextLabel aktualisiert seinen Text nicht, wenn ihm ein neuer Wert zugewiesen wird
Ever MPMediaPickerController wird die Daten gerne zurückgeben und es wird sogar den Delegaten mit dem richtigen Wert aktualisieren, nachdem ich den Wert gespeichert habe, aber es wird die DetailTextLabel nicht aktualisieren, bevor ich das AlarmObject speichern. Ich kann in meinen Protokollen sehen, dass das Objekt sogar mit den richtigen Werten gespeichert wird, wenn der ViewController beendet wird. Die einzige seltsame Sache ist, dass das fragliche VC ein Kind VC eines anderen VC ist, aber ich denke nicht, dass das das Problem ist.
Wenn es hilft, sind alle VCs auch Teil eines UINavigationController mit Ausnahme des MediaPicker.
Ich habe versucht, die Daten neu zu laden, die Änderung auf dem Hauptthread zu verzögern, den Hauptthread zu verzögern, um alle Änderungen ausführen zu lassen, die spezifische Zeile für wo die MediaCell ist, needsDisplay und needsLayout und layoutIfNeeded für die Zelle aufzurufen, nichts funktioniert. Irgendwelche Vorschläge sind sehr willkommen, da ich mich in den letzten Tagen immer wieder dagegen gewehrt habe und frustrierend wurde.
#import "AddAlarmTableViewController.h"
#import "ToneTableViewController.h"
@interface AddAlarmTableViewController()
@property (weak, nonatomic) IBOutlet UITableViewCell *mediaCell;
@end
@implementation AddAlarmTableViewController
@synthesize previousLabel, previousSoundAsset, previousRepeatArray,alarmDelegate,mediaCell;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:NO];
if(previousSoundAsset != nil) {
mediaCell.detailTextLabel.text = previousSoundAsset;
} else {
mediaCell.detailTextLabel.text = @" ";
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if([cell.reuseIdentifier isEqualToString:@"mediaCell"]) {
UIAlertController *selectTypeAlertController = [UIAlertController alertControllerWithTitle:@"Select Media From" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
//Creating actions
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *selectFromMusicAction = [UIAlertAction actionWithTitle:@"Music" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self launchMediaPickerController];
}];
UIAlertAction *selectFromToneAction = [UIAlertAction actionWithTitle:@"Tone" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self launchTonePickerController];
}];
//adding them to uialertcontroller;
[selectTypeAlertController addAction:cancelAction];
[selectTypeAlertController addAction:selectFromMusicAction];
[selectTypeAlertController addAction:selectFromToneAction];
[self presentViewController:selectTypeAlertController animated:true completion:nil];
}
}
- (void)launchTonePickerController {
ToneTableViewController *toneVC = [[ToneTableViewController alloc] init];
toneVC.alarmDelegate = alarmDelegate;
[self.navigationController pushViewController:toneVC animated:true];
}
- (void)launchMediaPickerController {
NSLog(@"Launching MPMediaPickerController");
MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
mediaPicker.delegate = self;
mediaPicker.allowsPickingMultipleItems = NO;
[self presentViewController:mediaPicker animated:true completion:nil];
}
//MPMediaPickerDelegate methods
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
[self dismissViewControllerAnimated:true completion:^ {
NSLog(@"MPMediaPickerController dismissed");
}];
}
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection {
MPMediaItem *selectedTrack = [[mediaItemCollection items] objectAtIndex:0];
alarmDelegate.soundAsset = selectedTrack.title;
mediaCell.detailTextLabel.text = alarmDelegate.soundAsset;
alarmDelegate.appTones = [[NSNumber alloc] initWithBool:NO];
[self dismissViewControllerAnimated:true completion:^ {
NSLog(@"MPMediaPickerController dismissed with %@", alarmDelegate.soundAsset);
dispatch_async(dispatch_get_main_queue(),^{
[self.tableView reloadData];
});
}];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"repeatSegue"]) {
DayTableViewController *daysViewController = segue.destinationViewController;
daysViewController.alarmDelegate = alarmDelegate;
if(previousRepeatArray != nil) {
daysViewController.previousSelection = previousRepeatArray;
}
}
else if([segue.identifier isEqualToString:@"labelSegue"]) {
LabelViewController *labelViewController = segue.destinationViewController;
labelViewController.alarmDelegate = alarmDelegate;
if(previousLabel != nil) {
labelViewController.previousLabel = previousLabel;
}
}
}
@end
Sind Sie sicher, dass die Steckdose nicht gleich Null ist? – Brandon
Ja, es ist nicht nil, ich habe es einfach überprüft. – xinkecf35