2013-07-22 3 views
1

Недавно я застрял в проблеме, так что я не могу перейти к следующей части кодирования. Существует два контроллера вида (скажем, first.m и second.m), и я хотел бы передавать данные параметров от одного к другому контроллеру представления без использования раскадровки. Но сложная часть для меня - это второй контроллер представления, который уже был запущен в файле AppDelegate.m.Пропустить данные с одного viewcontroller на существующий viewcontroller программно

я могу передать данные, если я инициировал второй контроллер представления в первом контроллере представления с некоторым импортирующей заголовочного файла, например ..

@import "Second.h" 

Second *secondView = [[Second alloc] initWithNibName:@"SecondNib" bundle:nil]; 
secondView.someStringValue = @"passThisString"; 

Однако, это кодирование делает новый второй контроллер представления, который не то, что я хочу. Я нашел что-то вроде

myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 

для подключения к файлу приложения AppDelegate.m. Но через несколько дней, борясь с этим, мой мозг становится затемненным. Пожалуйста, дайте мне какие-либо советы. Есть ли способ передать данные в существующий контроллер просмотра без использования раскадровки? или любым способом через контроллер AppDelegate для второго представления. Любая помощь будет оценена

+0

Итак, сначала вы загружаете контроллер второго вида, а затем загружаете контроллер первого вида. это? – Ganapathy

+0

Нет необходимости использовать AppDelegate или NSUserDefaults. Просто создайте метод init для вашего второго viewController. как initWithNibName, но этот метод примет ваш someStringValue. –

+0

@Ganapathy Я инициировал два контроллера вида в файле AppDelegate.m. В то время как я работал в первом. Мне нужно было передать некоторые данные на second.m. – jazzed28

ответ

2

@ jazzed28 вы можете сделать это, не возбуждая вашего Second. Вам просто нужно получить доступ к уже начатому Second. Так объявить Second в myAppDelegate.h как property его, как это -

@property (nonatomic, strong) Second *svc; 

тогда, когда вам нужно второе вы можете получить доступ, как это -

myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 

appDelegate.svc 
+0

Я пытался обновить значения до другого контроллера представления, не создавая новый файл nib, но внезапно я понял, что это было бы лишним вещь. Поэтому я попытался нажать новый контроллер с файлом nib через файл AppDelegate.h. Спасибо, я многому научился с этими ответами – jazzed28

1

Создайте два метода класса в myAppDelegate для настройки данных и получения данных из Appdelegate, вы можете получить доступ к этим методам с помощью имени класса APpdelegate.

Setter method 
+(void)setGlobalString:(NSString *)stringgValue{ 
      [[NSUserDefaults standardUserDefaults] setObject:stringgValue forKey:@"globalValue"]; 
    // you can save string value here by using NSUserDefaults or any thing else 

    } 
Getter method 
+(NSString *)getGlobalString{ 
     return [[NSUserDefaults standardUserDefaults] forKey:@"globalValue"]; 
    } 

вы можете вызывать методы как

[myAppDelegate setGlobalString:yourString]; 

NSString *str = [myAppDelegate getGlobalString]; 
1

Этот вопрос задавали много раз, прежде чем, в том числе на StackOverflow , Если вы потратили еще некоторое время на поиск ответа, вы могли бы найти, например, this answer.

+0

Спасибо, что я уже поднял этот ответ, прежде чем публиковать этот вопрос – jazzed28

Смежные вопросы