我正在转换为 ARC,并且找不到任何方法来摆脱这个编译器错误而不破坏代码。
我需要将 2 个对象传递给选择器,因此我将它们都添加到数组中,如下所示,并将该数组发送到选择器:
LWPagerContent* content = nil;
NSArray* args = [NSArray arrayWithObjects:article, [NSValue valueWithPointer:&content], nil];
[self performSelectorOnMainThread:@selector(initArticlePagerContent:) withObject:args waitUntilDone:YES];
该方法访问数组,但需要修改数组中引用的地址处的对象。它应该初始化 LWPagerContent 对象,如图所示,然后该对象将由调用 performSelector 的原始方法使用。
- (void)initArticlePagerContent:(NSArray*)args {
Article* article = [args objectAtIndex:0];
LWPagerContent** contentPtr = [[args objectAtIndex:1] pointerValue];
*contentPtr = [[NSClassFromString([StyleSheet articleContentClass]) alloc] initWithArticle:article];
}
这很好用,但是当我尝试转换为 ARC 时,我立即被告知"Implicit conversion of a non-Objective-C type 'void *' to 'LWPagerContent *__strong *' is disallowed with ARC"
. 此错误发生在以(上面显示的倒数第二个)开头的行上"LWPagerContent **..."
。我已经尝试过使用__bridge
和__autoreleasing
其他帖子中的建议,但似乎没有任何效果。任何建议都非常感谢。