0

プロジェクトをObejctive-CARCに移行すると、次のエラーが発生しました。

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;
    }

しかし、私はそれを修正する方法を知っているかどうかはよくわかりません。どんなアイデアでもありがたいです。

4

2 に答える 2

2

ARC では、オブジェクトまたは nil のみを返すことが許可されています。限目。

これは、ARC が要求するだけでなく、ポインターを使って怪しいことをしないことを要求するためです。つまり、ポインターはオブジェクトまたは nil のいずれかを指します。

ポインターに NO (ゼロ値) を詰め込もうとしているため、ARC が適合しています。これはルールに違反しているため、エラーが発生しています。

a) 有効な戻り値が何に対するものかわからない (なぜ NO なのか? なぜ nil でないのか?)。これはコードの一部のように見えるため、お役に立てません。ごめん。

于 2012-06-15T16:55:05.607 に答える
0

それをしないでください。NO は、その関数の有効な戻り値ではありません。コードは ARC の前に壊れていましたが、ARC の後も壊れています。

また、これらの行:

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

これらとまったく同じです:

if (myVariable == nil) {
    break;
}

ただし、非常に紛らわしい方法で記述されており、ステータスの初期化を ARC に依存しています。それはあなたが望んでいたものではないと確信しています。

基本的に、この方法は完全に間違っているように見えます。

于 2012-06-14T19:06:19.100 に答える