私はまだ iOS 開発を始めたばかりですが、解決できない問題に遭遇し、オンラインで調べてみましたが、まだ何も見つかりません。
UIImagePickerController を使用して画像を選択し、App Delegate で使用しています。画像が返ってきたら、imagePickerController:didFinishPickingMediaWithInfoメソッドで、View Controllerで新しいNavigation Controllerを作って「app」の上に乗せたい。
これが私がやっている方法です:
CustomNavigationController *customNavigationController = [[CustomNavigationController alloc] init];
PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:[NSBundle mainBundle]];
[customNavigationController pushViewController:photoViewController animated:NO];
[customNavigationController.view setFrame:[[UIScreen mainScreen] applicationFrame]];
[photoViewController release];
[self.window addSubview:customNavigationController.view];
//Call method of photoViewController.
[[customNavigationController.viewControllers objectAtIndex:0] addPhotoFromData:info];
[self.tabBarController dismissViewControllerAnimated:YES completion:nil]; //Get rid of UIImagePickerController
ただし、photoViewController では、viewDidLoad で合成およびロードされたインスタンス変数にアクセスできません。それらはすべて null に戻ります。tableView もあり、tableView をリロードする呼び出しは、実際には tableView を応答させません。
これは、photoViewController のコードの一部です。
- (void)viewDidLoad
{
[super viewDidLoad];
self.photoCount = 0;
self.timestamp = [[NSDate date] timeIntervalSince1970];
self.photos = [[NSMutableArray alloc] initWithCapacity:5];
self.photosData = [[NSMutableArray alloc] initWithCapacity:5];
self.uploadingCount = 0;
UINib *customCell = [UINib nibWithNibName:@"CustomTableCell" bundle:[NSBundle mainBundle]];
[self.tableView registerNib:customCell forCellReuseIdentifier:@"customCell"];
self.tableView.separatorColor = [UIColor clearColor];
NSLog(@"%@", self);
}
また、 addPhotoFromData メソッド:
- (void)addPhotoFromData:(NSDictionary *)info
{
[self.photos addObject:info];
NSLog(@"%@", self.photos); //Doesn't add "info" and does not return anything when later called from other methods.
[self.tableView reloadData]; //Doesn't work
UINavigationController を追加する前は、すべてが機能していました。私は完全に迷っています。
編集:さらにデバッグを試みた後、 addPhotoFromData が呼び出されたときにビューがロードされていないことがわかりました。viewDidLoad はあとがきと呼ばれます。メソッド呼び出しを遅らせる方法はありますか?