#ios #objective-c #cocoa-touch #segue
#iOS #objective-c #cocoa-touch #segue
Вопрос:
Я просто хочу, чтобы segue передавал что-то моему SecondViewController, но этого «нет» в моем коде. Я получаю сообщение об ошибке «использование неопознанного идентификатора SecondViewController», но я импортировал соответствующий файл .h.
Я попробовал несколько различных комбинаций попыток явного объявления этого, но ничего не работает.
Каков правильный способ сделать это — чего мне не хватает!
В моем SecondViewController встроен NavigationControllerEmbedded, поэтому переход от FirstViewController к SecondViewController кажется ужасно сложным для относительно простого процесса.
Код:
FirstViewController.h
(Should there be something here?)
FirstViewController.m
#import "FirstViewController.h"
#import "SecondViewController.h"
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"123"]) {
UINavigationController *navController = [segue destinationViewController];
SecondViewController *BVC = (SecondViewController *)([navController viewControllers][0]);
Я получаю ошибку в приведенной выше строке.
BVC.ATitle = @"SomeText"
BVC.AImg = [UIImage imageNamed:@"SomePicture.jpg"];
}
}
SecondViewController.h
@property (strong, nonatomic) IBOutlet UILabel *ALabel;
@property (strong, nonatomic) IBOutlet UIImageView *AImageView;
@property (strong, nonatomic) UIImage *AImg;
@property (strong, nonatomic) NSString *ATitle;
SecondViewController.m
#import "FirstViewController.h"
#import "SecondViewController.h"
@implementation ButtonViewController
@synthesize ALabel;
@synthesize AImageView;
- (void)viewDidLoad
{
self.ALabel.text = self.ATitle;
self.AImageView.image = self.AImg;
}
Редактировать: Но я явно пропускаю объявление SecondViewController где-либо в моем коде, иначе почему бы его даже не было в приглашении, когда я начинаю пытаться ввести его. Даже если я попробую это без NavController все вместе, это все равно выдает ошибку неопознанного идентификатора.
Комментарии:
1. Ваш первый контроллер просмотра встроен в контроллер навигации? Или только второй?
2. @Paulw11 Нет, первого контроллера просмотра нет, только второй.
3. Тогда я не думаю, что вы можете использовать push-segue от 1 до 2, но независимо от этого вы должны установить точку останова в prepareForSegue и изучить NavController, чтобы увидеть, что это за объект. Я подозреваю, что вы можете обнаружить, что это ссылка на SecondViewController
Ответ №1:
Используйте navigationController.topViewController
вместо navigationController.viewControllers[0]
.
Попробуйте удалить файлы второго view controller из Xcode (не перемещая их в корзину), а затем повторно добавить их. Кроме того, очистите проект перед повторной компиляцией.
Еще одна проблема с вашим кодом заключается в том, что вы не соблюдаете соглашение об использовании имен переменных в camelCase, начинающихся с маленькой буквы. Хотя это не должно иметь значения для компиляции, это делает ваш код менее читаемым.
Комментарии:
1. вместо чего именно?
2. Я изложил это по буквам — извините, я думал, это очевидно. Это также должно решить вопрос (поскольку проблема, вероятно, связана с приведением).
3. @Mundi Ура! Удаление и чтение исправили это. Вероятно, следовало попробовать это раньше. Новое это было бы просто. И все же, почему это должно происходить случайным образом?