내 앱의 알람 기능에 대한 설정/옵션보기로 정적 테이블보기를 사용하려고했습니다. 여러 가지 ViewControllers를 앞뒤로 데이터를 전달하고 업데이트하고 값을 업데이트 할 수있었습니다.UITableViewCell detailTextLabel이 새 값이 할당 될 때 해당 텍스트를 업데이트하지 않습니다.
MPMediaPickerController는 값을 저장 한 후에도 기꺼이 데이터를 다시 전달하고 대리자를 올바른 값으로 업데이트하지만 alarmObject를 저장하기 전에 detailTextLabel을 업데이트하지 않습니다. ViewController를 닫을 때 객체가 올바른 값으로 저장된다는 것을 로그에서 볼 수 있습니다. 유일한 이상한 점은 해당 VC가 다른 VC의 하위 VC이지만 그 것이 문제라고 생각하지 않습니다.
모든 VC는 MediaPicker를 제외하고는 UINavigationController의 일부이기도합니다.
주 스레드에서 변경 사항을 실행하고 주 스레드가 모든 변경 사항을 실행하도록 지연하고, mediaCell이있는 곳의 특정 행을 다시로드하고, 셀에서 needsDisplay 및 needsLayout 및 layoutIfNeeded를 호출하여 데이터를 다시로드하려고 시도했지만, 아무것도 작동하지 않습니다. 지난 며칠 동안 머리를 맞 and고 좌절감을 나타내 기 때문에 어떤 제안이라도 대단히 환영합니다.
#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
콘센트가 0이 아닌 것은 확실합니까? – Brandon
예 아니요, 그냥 두 번 확인했습니다. – xinkecf35