2010-11-26 11 views
2

J'ai un tableau où j'obtiens des données de la base de données pour une certaine valeur spécifique, et donc la clé où cette valeur particulière n'est pas là, elle récupère la valeur nulle dans le tableau. Maintenant, ma question est de savoir comment puis-je éliminer cette valeur nulle de la matrice? J'ai essayé d'aller chercher la valeur nsarray dans nsstring puis dans un autre tableau, mais alors il ne récupère pas tout le tableau, mais prend la dernière valeur indexée.comment éliminer la valeur nulle du nsarray?

S'il vous plaît aidez-moi. Je vous remercie.

Je joins le code pour référence ultérieure:

NSString *url = [NSString stringWithFormat:@"webservice from where i m fetching data"]; 
NSLog(url); 
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 
    [request setHTTPMethod: @"POST"]; 

NSData *returnData = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; 
dataArray=[[returnString JSONValue] retain]; 
[self setAlldetails:dataArray];  

nsarray *InteName = [alldetails valueForKey:@"IntelligenceName"]; 

donc le tableau récupère la valeur pour le tableau InteName comme ceci:

(
    "00:00:00", 
    "00:00:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "00:00:00", 
    "00:00:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>" 
) 

maintenant, je veux supprimer occurance de la valeur null.

des suppositions ??

+1

Donnez du code pour suivre votre erreur dans votre code. – Ishu

+0

filteredArrayUsingPredicate :. Manière moins de code que les solutions ci-dessous. –

+0

En outre, je ne serais pas surpris s'il a une meilleure exécution que O (n). –

Répondre

6

Got the en solution faire T & E:

NSMutableArray *array = [[NSMutableArray alloc]init]; 
array = [InteName retain]; 
NSLog(@"Array : : %@",array); 

NSMutableArray *array1 = [[NSMutableArray alloc]init]; 

NSString *str; 
for(int i=0;i<[array count];i++) 
{ 
    str = [array objectAtIndex:i]; 
    if(str !=[NSNull null]) 
    { 
     [array1 addObject:str]; 
     //[array removeObjectAtIndex:i]; 
    } 
} 
+3

Une suggestion: if (! [Str isKindOfClass: [NSNull class]]) plutôt que if (str! = [NSNull null]). Ce dernier publie un avertissement. – mpemburn

+0

@mpemburn le contrôle d'identité est suffisant et beaucoup plus rapide aussi. Jetez l'un des deux à 'id' et l'avertissement devrait disparaître. –

1

Je ne sais pas si je lis bien votre question, mais en supposant que vous voulez vous débarrasser des entrées NULL dans votre tableau et qu'ils sont en fait @"<null>" chaînes:

NSMutableArray *array = ...; 
for (id nullObject in array) 
{ 
    if ([nullObject isKindOfClass:[NSString class] && [nullObject isEqualToString:@"<null>"] 
    { 
     [array removeObjectAtIndex:i]; 
    } 
} 
+0

Cela va lancer, comme vous changez le tableau tout en itérant sur lui. – zoul

+0

Ce code lance également une exception avec le même message d'erreur que ci-dessus, car la valeur null est comparée à la valeur nulle. Que dois-je faire pour éliminer les choses? – Sarah

0
NSMutableArray *nulls = [NSMutableArray array]; 
for (id candidate in dataArray) 
    if (candidate == [NSNull null]) 
     [nulls addObject:candidate]; 
[dataArray removeObjectsInArray:nulls]; // assuming dataArray is mutable 
+0

hey Zoul, Merci pour l'aide. J'ai essayé votre code, mais il est terminé avec ce qui suit: - [NSNull isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0x264ad68 2010-11-26 15: 05: 50.104 [4275: 207] *** App terminant en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '- [NSNull isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0x264ad68' ..... terminate appelé après avoir lancé une instance de 'NSException' Signal reçu du programme: "SIGABRT". C'est parce que, il va comparer null avec null. – Sarah

+0

Essayez la version modifiée. – zoul