Изменение пользовательского интерфейса из AppDelegate - PullRequest
0 голосов
/ 25 декабря 2011

Я пытаюсь установить UITextView из моего AppDelegate, когда приложение завершило запуск. На самом деле я просто хочу открыть файл и передать его содержимое в UITextView.

В моем ViewController я добавил следующий метод:

ViewController.h:

@interface
{
    IBOutlet UITextView *textView;
}    
- (void)openFile:(NSString *)myString;

ViewController.m:

- (void)openFile:(NSString *)myString
{
    textView.text = myString;
}

В моем AppDelegate следующее:

AppDelegate.m:

#import "ViewController.h"
@implementation AppDelegate
- (BOOL)application: [...] didFinishLaunchingWithOptions: [...]
{
    ViewController *test = [[ViewController alloc] init];
    [test openFile:@"this is a test"];
}

Когда я пытаюсь вызвать метод из моего AppDelegate, он фактически вызывается и передает строку, как и ожидалось. Я тестировал через NSLog(@"%@", myString);.

Но значение textView не меняется. Сначала я подумал, что может быть другая проблема, поэтому я вызвал метод с помощью UIButton после загрузки представления и т. Д. Но все было в порядке, и textView изменилось.

Тогда я подумал, что представление может быть загружено после вызова моего метода из AppDelegate. Я добавил еще несколько NSLogs, и оказалось, что представление полностью загружено, затем мой AppDelegate вызывает метод.

Итак, AppDelegate вызывает [test openFile:(NSString *)] после того, как представление полностью загружено и передает строку. Но значение моего textView по-прежнему не меняется.

Есть предложения по этому поводу? Кто-нибудь из вас сталкивался с такой же проблемой?

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

Вы не загружаете ни одного представления для ViewController.Так что розетка ни к чему не подключена.если вы загружаете представления и ViewController из файла NIB (xib), вам не нужно создавать еще один экземпляр ViewController.Это то, что вы делаете, когда выделяете и запускаете новый ViewController, создаете новый экземпляр, не подключающийся ни к чему.Попробуйте что-то вроде

- (BOOL)application: [...] didFinishLaunchingWithOptions: [...]
{
    ViewController *test = [[ViewController alloc] initWithNibName:@"YourXibName" 
                                 boundle:nil  ];
    [test openFile:@"this is a test"]; 
    self.window.rootViewController = test.view ;
    [self.window makeKeyAndVisible];
    return YES;
}
0 голосов
/ 26 декабря 2011

Не совсем то, что мне было нужно. Но вы дали мне правильную идею. Большое спасибо!

self.viewController = [[test3ViewController alloc] initWithNibName:@"YourXibName" bundle:nil]; 
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[self.viewController openFile:@"Der Test"];
...