0

将我的项目迁移到 Obejctive-C ARC 时,出现一个错误:

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

Xcode 所指的函数正在返回NO,或者nil尽管它的返回类型是 type 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;
    }

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

4

2 回答 2

2

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

这是因为 ARC 不仅要求,而且要求您不要对指针做任何可疑的事情——指针要么指向对象,要么指向 nil。

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

我们无法帮助您修复它,因为 a) 我们不知道有效的返回值是什么(为什么不?为什么不为零?)。由于这似乎是一个代码片段,因此很难为您提供帮助。对不起。

于 2012-06-15T16:55:05.607 回答
0

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

此外,这些行:

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

与这些完全相同:

if (myVariable == nil) {
    break;
}

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

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

于 2012-06-14T19:06:19.100 回答