2014-07-21 2 views
0

J'essaie de renvoyer des objets à un NSArray lorsqu'ils correspondent à un ou plusieurs critères (kOption). Le code avec lequel je suis sorti fonctionne bien si j'ai kOption1 OU kOption2 ou kOption3 et ainsi de suite, mais si j'ai kOption1 et KOption2, il retournera simplement le premier.Retour aux critères croisés correspondant à NSArray

Je viens de commencer à programmer et j'essaie de comprendre comment l'obtenir sans avoir à écrire des tonnes de conditions imbriquées si/sinon. Ou est-ce la façon dont je dois aller?

Merci.

if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption1]) { 

    return [BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
              withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede != %d) AND (idTipoSede != %d)", kTipoSedePrivata, kTipoSedeDayOff] 
                sortKey:nil 
              sortAscending:NO]; 


} if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption2]) { 

    return [BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
              withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d)", kTipoSedeVenue, kTipoSedeArci, kTipoSedeSquat, kTipoSedeGalleria, kTipoSedeHouse, kTipoSedeFestival] 
                sortKey:nil 
              sortAscending:NO]; 


} if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption3]) { 

    return [BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
              withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d)", kTipoSedeVenue, kTipoSedeArci, kTipoSedeSquat, kTipoSedeGalleria, kTipoSedeHouse, kTipoSedePromoter] 
                sortKey:nil 
              sortAscending:NO]; 
    } else { 
     return [something else...]; 
} 

Répondre

0

Utilisez NSMutableArray que vous devez retourner plus d'un elments

NSMutableArray *arr = [@[] mutableCopy]; 

if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption1]) { 

    [arr addObject:[BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
              withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede != %d) AND (idTipoSede != %d)", kTipoSedePrivata, kTipoSedeDayOff] 
                sortKey:nil 
              sortAscending:NO]]; 


} 

if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption2]) { 

     [arr addObject:[BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
               withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d)", kTipoSedeVenue, kTipoSedeArci, kTipoSedeSquat, kTipoSedeGalleria, kTipoSedeHouse, kTipoSedeFestival] 
                 sortKey:nil 
               sortAscending:NO]]; 


} 

if ([[NSUserDefaults standardUserDefaults] boolForKey:kOption3]) { 

     [arr addObject: [BOTManagedObjectContext searchObjectsForEntity:@"Sede" 
               withPredicate:[NSPredicate predicateWithFormat:@"(idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d) OR (idTipoSede = %d)", kTipoSedeVenue, kTipoSedeArci, kTipoSedeSquat, kTipoSedeGalleria, kTipoSedeHouse, kTipoSedePromoter] 
                 sortKey:nil 
               sortAscending:NO]]; 
} 


if(something else) { 
       [arr addObject: [something else...]]; 
} 

    return arr; 

et utiliser où vous obtenir ce que arr [0] pour kOption1, arr [1] pour kOption2, arr [3 ] pour kOption3 et ainsi de suite et vérifiez le nombre de tableaux selon vos besoins.

+1

Correction du formatage «if». Il est formaté comme s'il y avait des instructions 'else if' mais il n'y en a pas. Aussi, je pense que vous voulez 'arr addObjectsFromArray: ...'. – rmaddy

+0

ouais, sinon si c'était une faute de frappe. et oui, il fallait addObjectsFromArray. – DavideC

Questions connexes