Ios 从另一个类调用函数在屏幕上绘制

Ios 从另一个类调用函数在屏幕上绘制,ios,objective-c,Ios,Objective C,我正在应用程序中实现日历功能。当calendar类calendar.m出现时,我调用一个函数来启动另一个函数(CalendarArrayHandler.m),该函数将使用以下代码处理解析: CalendarArrayHandler *caller = [[CalendarArrayHandler alloc] init]; [caller performSelectorInBackground:@selector(mergeCalendars:) withObject:calendarUrlA

我正在应用程序中实现日历功能。当calendar类calendar.m出现时,我调用一个函数来启动另一个函数(CalendarArrayHandler.m),该函数将使用以下代码处理解析:

CalendarArrayHandler *caller = [[CalendarArrayHandler alloc] init];

[caller performSelectorInBackground:@selector(mergeCalendars:) withObject:calendarUrlArray];
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];
然后CalendarArrayHandler.m类启动解析和许多其他内容来解释XML文件。完成后,我使用以下代码保存NSMutableArray:

CalendarArrayHandler *caller = [[CalendarArrayHandler alloc] init];

[caller performSelectorInBackground:@selector(mergeCalendars:) withObject:calendarUrlArray];
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-class中)成功接收NSMutableArray,该数组将在displayCalendar函数的屏幕上绘制。此函数是用

[self performSelectorOnMainThread:@selector(displayCalendar) withObject:nil waitUntilDone:NO];
如果出现问题,UIView和标签将不会显示在屏幕上。我试着用iAction调用displayCalendar函数,它工作得很好,但是当我从Calendar.m类外部调用load函数时,我无法让它工作,即使displayCalendar函数是用performSelectorOnMainThread函数调用的


我希望您能理解我的问题,并了解为什么它不起作用。

您所说的“从Calendar.m类之外”是什么意思?从你的描述来看,你好像在Calendar.m班。如果没有,则不向“self”发送performSelector消息。我从CalendarArrayHandler.m类调用loadCalendarEntriesFromFile函数(在Calendar.m中)。loadCalendarEntriesFromFile函数然后调用displayCalendar。