2015-08-03 3 views
4

Je suis en train de transformer une valeur de attente/terminée à une valeur booléenne valeur True/FalseConversion implicite de « BOOL » (alias « bool ») à « id » est pas autorisée par ARC

Voici le code que:

RKValueTransformer *transformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) { 
     return ([sourceClass isSubclassOfClass:[NSNumber class]]); 
    } transformationBlock:^BOOL(NSNumber *inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputClass, NSError *__autoreleasing *error) { 
     // validate the input 
     RKValueTransformerTestInputValueIsKindOfClass(inputValue, [NSNumber class], error); 
     if([inputValue isEqualToNumber:@(Completed)]) { 
      *outputValue = YES; 
     } else if([inputValue isEqualToNumber:@(Pending)]){ 
      *outputValue = FALSE; 
     } 
     return YES; 
    }]; 

Cependant, je reçois l'erreur: Implicit Conversion of 'BOOL'(aka 'bool') to 'id' is disallowed by ARC

Lorsque je tente de régler la OutputValue être OUI ...

Qu'est-ce qui se passe ici?

Il doit correspondre à cette sortie:

{ 
    “IsCompleted”: true (nullable), 
    “Desc”: null (“new description” on edit) 
} 
+0

BOOL est pas une classe - vous devrez retourner un NSNumber qui enveloppe votre valeur BOOL – Paulw11

+0

Comment ferais-je cela? Désolé je suis nouveau à Objective-C –

+0

J'ai utilisé google et rien d'utile n'est apparu. Faites-moi savoir si vous pouvez réellement répondre à ma question –

Répondre

12

Le transformationBlock accepte un objet d'entrée et doit produire un objet différent, mais BOOL est un type intrinsèque, pas un type d'objet, de sorte que vous ne pouvez pas définir *output à une valeur booléenne droite.

Vous pouvez définir à un objet NSNumber qui enveloppe la valeur booléenne -

*output=[NSNumber numberWithBool:YES]; 

Ou utilisez le raccourci

*[email protected]; 
+0

N'est-ce pas simplement la valeur 0 ou 1? –

+0

Fondamentalement, oui. Je ne connais pas le contexte de votre code, mais si vous voulez un bool, vous devriez probablement utiliser une instruction if au lieu du transformateur. – Paulw11

+0

Il s'agit d'un appel de kit de repos –