アプリにカレンダー機能を実装しています。カレンダー クラス Calendar.m が表示されたら、次のコードで解析を処理する別の関数 (CalendarArrayHandler.m) を開始する関数を呼び出します。
CalendarArrayHandler *caller = [[CalendarArrayHandler alloc] init];
[caller performSelectorInBackground:@selector(mergeCalendars:) withObject:calendarUrlArray];
次に、CalendarArrayHandler.m-class が解析を開始し、XML ファイルを解釈するためのその他の多くのことを行います。完了したら、次のコードで NSMutableArray を保存します。
NSData *calendarData = [NSKeyedArchiver archivedDataWithRootObject:sortedArrayToSave];
[[NSUserDefaults standardUserDefaults] setObject:calendarData forKey:@"CalendarEntries.dat"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *arrayFileName = [documentsDirectory stringByAppendingPathComponent:@"CalendarEntries.dat"];
[calendarData writeToFile:arrayFileName atomically:YES];
この時点で、Calendar.m クラスの loadCalendarEntriesFromFile 関数を次のように呼び出します。
Calendar *caller = [[Calendar alloc] init];
[caller performSelectorInBackground:@selector(loadCalendarEntriesFromFile) withObject:nil];
この関数 (現在は Calendar.m クラスにあります) は、displayCalendar 関数で画面に描画される NSMutableArray を (正常に) 受け取ります。この関数は
[self performSelectorOnMainThread:@selector(displayCalendar) withObject:nil waitUntilDone:NO];
ここで問題が発生し、UIviews とラベルが画面に表示されません。IBAction で displayCalendar-function を呼び出してみましたが、正常に動作しますが、displayCalendar-function が performSelectorOnMainThread で呼び出されても、Calendar.m-class の外部から load 関数を呼び出すと動作しません。 -関数。
私の問題を理解し、なぜうまくいかないのかを理解していただければ幸いです。