当我将项目迁移到Obejctive-C ARC时,我收到一个错误:
implicit conversion of 'bool' (aka 'signed char') to 'nsdata *' is disallowed with arc
Xcode引用的函数是因为此错误返回NO
或nil
,但其返回类型的类型为NSData
:
- (NSData *)compressBytes:(Bytef *)bytes length:(NSUInteger)length error:(NSError **)err shouldFinish:(BOOL)shouldFinish
{
if (length == 0) return nil;
int status;
if (status == myVariable) {
break;
} else if (status != y_OK) {
if (err) {
*err = [[self class] deflateErrorWithCode:status];
}
return NO;
}
但是,我不太确定我知道如何解决这个问题,任何想法都会受到赞赏。
答案 0 :(得分:2)
在ARC下,您只能返回一个对象或零。周期。
这是因为ARC不仅仅需要,而是要求你不要用指针做任何事情 - 指针要么指向对象,要么为零。
ARC正在适应,因为你试图将NO(零值)填充到指针中。这违反了规则,这就是您收到错误的原因。
我们无法帮你修复它因为a)我们不知道有效的返回值是什么(为什么不?为什么不是nil?)。由于这似乎是一个代码片段,很难帮助你。遗憾。
答案 1 :(得分:0)
不要那样做。 NO在任何意义上都不是该函数的有效返回值。你的代码在ARC之前被破坏了,现在它仍然被破坏了。
另外,这些行:
int status;
if (status == myVariable) {
break;
}
与这些完全相同:
if (myVariable == nil) {
break;
}
除了以非常混乱的方式编写,并依赖ARC初始化状态。我很确定这不是你想要的。
基本上,这种方法看起来完全错误。