使用arc不允许将'bool'(又名'signed char')隐式转换为'nsdata *'

时间:2012-06-12 02:48:23

标签: automatic-ref-counting xcode4.3

当我将项目迁移到Obejctive-C ARC时,我收到一个错误:

implicit conversion of 'bool' (aka 'signed char') to 'nsdata *' is disallowed with arc

Xcode引用的函数是因为此错误返回NOnil,但其返回类型的类型为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;
    }

但是,我不太确定我知道如何解决这个问题,任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

在ARC下,您只能返回一个对象或零。周期。

这是因为ARC不仅仅需要,而是要求你不要用指针做任何事情 - 指针要么指向对象,要么为零。

ARC正在适应,因为你试图将NO(零值)填充到指针中。这违反了规则,这就是您收到错误的原因。

我们无法帮你修复它因为a)我们不知道有效的返回值是什么(为什么不?为什么不是nil?)。由于这似乎是一个代码片段,很难帮助你。遗憾。

答案 1 :(得分:0)

不要那样做。 NO在任何意义上都不是该函数的有效返回值。你的代码在ARC之前被破坏了,现在它仍然被破坏了。

另外,这些行:

  int status;
  if (status == myVariable) {
        break;
  }

与这些完全相同:

if (myVariable == nil) {
    break;
}

除了以非常混乱的方式编写,并依赖ARC初始化状态。我很确定这不是你想要的。

基本上,这种方法看起来完全错误。