別のクラスのビューを更新できるようにしたいのですが、試したことは何も機能していません。私のアプリケーションは、いくつかのタブが設定されたタブ付きアプリケーションです。ViewController1クラスにrefreshというメソッドがあります。これは次のようになります。
-(void)TestMe{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"];
[responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding error:Nil];
[self loadView];
[self viewDidLoad];
}
これは正常に機能します。アプリケーションが最初に読み込まれると、別のjsonが読み込まれます。次に、このボタンをクリックすると、新しいJSONが読み込まれ、ビューが更新されます。これは、更新をテストするための一時的なものです。ただし、このメソッドを別のクラスから、またはAppDelegates ApplicationDidEnterForegroundメソッドから呼び出そうとしても、何も起こりません。このように呼んでみました
-(void)TestMe{
ViewController1 *vc = [[ViewController1 alloc] init];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"];
[responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding error:Nil];
[vc loadView];
[vc viewDidLoad];
}
では、なぜこのメソッドが他のクラスから機能しないのでしょうか。私が望んでいるのは、別のクラスから、またはアプリケーションがロードされたときにビューを更新できるようにすることですが、機能するものが見つからないようです。
誰かが私を正しい方向に向けることができれば、とてもありがたいです!
編集:明確にするための更新
さて、私が今のところ嫌いなことをしたのはこれです
exit(0);
AppDelegatesApplicationDidEnterBackgroundの内部。これはある程度は機能しますが、理想的なソリューションではありません。
私が望んでいるのは、アプリケーションを再度開くと、AppDelegateが再度実行され、タブが設定されることです。サーバーから取得したJSONはタブの順序に影響を与える可能性があるため、AppDelegatesApplicationDidFinishLaunchingメソッドを再度リロードする必要があります。
また、アプリケーションの別のクラスからこれを実行できるかどうかを知りたいです。私のアプリケーションが最初にロードされるとき、それはユーザーの電話番号を尋ねます。そして、それは次にPINを生成するサーバーに送られます。これが完了したら、AppDelegateメソッドをロードして、タブや順序などの設定を開始します。