Domanda

Questa potrebbe essere la più semplice, ma io non sono in grado di trovare la causa esatta.Invece di spiegare in parole che segue è il mio codice:

NSString *str = @"";
NSInteger tempInteger = [str integerValue];

if (tempInteger == 0)
{
  NSLog (@"do something");
}

Se NSString di ritorno NULL quindi NSInteger restituisce 0 se NSStringha un certo valore, quindi NSInteger tornando stesso valore.

Ma quando NSString è NULL poi voglio NSInteger dovrebbe tornare NULL non è 0, ma io non sono in grado di convalida NSInteger come NULL.

Come posso ottenere il NULL valore in NSInteger se NSString è NULLO?

È stato utile?

Soluzione

NULL è un puntatore;NSInteger è un C primitiva che può contenere solo numeri.Non è possibile che un NSInteger mai NULL.(Nota a margine:quando si parla di Objective-C puntatori a oggetti, usiamo nil piuttosto che NULL.)

Invece, se si desidera gestire solo i casi in cui il valore intero è 0, ma la stringa non è NULL, si dovrebbe cambiare la vostra condizione come segue:

if (tempInteger == 0 && str != nil)

Tuttavia, nel tuo caso, la stringa non è nil;si tratta semplicemente di un inesistente-ma vuoto--stringa.Se si desidera verificare anche che la tua condizione potrebbe diventare:

if (tempInteger == 0 && [str length] > 0)

Questa verifica entrambi i casi a causa di un nil stringa di ritorno lunghezza 0.(In realtà, qualsiasi metodo inviato a nil tornerà 0, nil, 0.0, etc.a seconda del tipo di ritorno.)

Altri suggerimenti

In realtà è possibile implementare una logica come questa:

    .
  1. Controlla se la tua stringa è davvero un intero
  2. prova a convertirlo
  3. Se è uguale a 0 fare qualcosa
  4. Qualcosa come questo farebbe il trucco:

    NSString *str = @"";
    NSInteger tempInteger = [str integerValue];
    NSCharacterSet *cs = [NSCharacterSet decimalDigitCharacterSet];
    BOOL safe = [cs isSupersetOfSet:[NSCharacterSet characterSetWithCharactersInString:str]] && str.length > 0;
    
    if (safe && tempInteger == 0)
    {
      NSLog (@"do something");
    }
    
    .

Un numero intero può contenere solo numeri e non valore nullo.In questo caso dovresti prima controllare la lunghezza della stringa per verificare se è null

NSInteger è un tipo di variabile scalare.Il valore NULL (in realtà nil in ObjectiveC), indicando un puntatore verso l'indirizzo 0, quando il cast su un NSinteger sarà 0.

Per realizzare il tuo compito, dovrai confrontare NSString contro nil prima di convertirlo verso un intero.

if (str == nil)
{
   //our string is invalid
}
else
{
    tempInteger = [str integerValue];
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top