我这样做了
[(OfficeLinQViewController*)sharedManager.m_o performSelectorOnMainThread:@selector(findLocalListing::)
withObject:(folderList,path)
waitUntilDone:NO];
但问题是在findLocalListing函数中,两个参数路径都保存了不是folderList。
答案 0 :(得分:5)
再看一下withObject:
部分。它表示withObject,而不是withObjects。您只能将一个参数传递给选择器。
我通常使用这样的包装器方法来解决这些问题。
[(OfficeLinQViewController*)sharedManager.m_o performSelectorOnMainThread:@selector(findLocalListingWithArgumentArray:)withObject:[NSArray arrayWithObjects:folderList,path, nil] waitUntilDone:NO];
- (void)findLocalListingWithArgumentArray:(NSArray *)argArray {
[self findLocalListing:[argArray objectAtIndex:0] inPath:[argArray objectAtIndex:1]];
}
哦,你应该将findLocalListing ::重命名为有用的东西。
答案 1 :(得分:1)
我同意其他所有答案 - 你只能传递一个对象。但是,我通常以不同的方式解决它。
我使用NSDictionary来保存你的对象
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
folderList, @"folderList", path, @"path", nil];
[(OfficeLinQViewController*)sharedManager.m_o performSelectorOnMainThread:@selector(findLocalListing:) withObject:info waitUntilDone:NO];
在findLocalListing中
- (void)findLocalListing:(NSDictionary *)info {
NSString *path = [info objectForKey:@"path"];
NSArray *folderList = [info objectForKey:@"folderList"];
这使您可以根据需要传递任意数量的对象:)
如果你不喜欢NSDictionary,你可以创建自己的对象并传递它:)
答案 2 :(得分:0)
我认为应该更像这样:
[(OfficeLinQViewController*)sharedManager .m_o performSelectorOnMainThread:@selector(findLocalListing:) withObject:(folderList) waitUntilDone:NO];
请注意,我从@selector
参数中删除了第二个冒号以及withObject:
参数中的第二个参数。 performSelectorOnMainThread
不支持在没有先将它们包装在某种集合中的情况下发送多个对象。
但是,您可以按照提到的here向NSObject添加一个类别。它应该没问题,但我总是对基础对象添加方法持谨慎态度。
答案 3 :(得分:0)
您只能将一个对象传递给performSelector。我注意到您尝试使用以下格式传递两个:
(folderList,path)
这种元组形式在C中是允许的,但它不会像你想象的那样。我相信它会对元组中的每个项目进行评估,但总体而言,元组将评估最后一个项目的评估。
如果您需要向相关选择器提供一些内容,您可以选择以下几种方法: