我正在转换为ARC,并且无法找到任何方式来摆脱此编译器错误而不会破坏代码。将一个指针传递给NSArray中的一个对象,使用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
在其他帖子中推荐,但似乎没有任何工作。任何建议不胜感激。
我们是否假设您不能只更改initArticlePagerContent:? – 2013-02-12 20:51:22
名称'init ...'在ARC中有特殊含义。这真的是一个初始化程序吗?如果没有,请不要使用'init'开始它的名字。 – matt 2013-02-12 20:52:12
请更准确地说错误发生在哪一行以及您尝试过什么。 – matt 2013-02-12 20:52:28