In breve, non è possibile recuperare direttamente un oggetto casuale da un NSSet
.
Hai bisogno di trasformare il set in un array - in qualcosa che ha un indice che può essere randomizzato - re-architecting il tuo codice per usare un array o potresti implementarlo usando questo bit di pseudo-codice :
randomIndex = ...random-generator....(0 .. [set count]);
__block currentIndex = 0;
__block selectedObj = nil;
[set enumerateObjectsWithOptions:^(id obj, BOOL *stop) {
if (randomIndex == currentIndex) { selectedObj = obj; *stop = YES }
else currentIndex++;
}];
return selectedObj;
Sì, itera l'insieme, potenzialmente l'intero set, quando si afferra l'oggetto. Tuttavia, l'iterazione è praticamente ciò che accadrà nella conversione ad un NSArray comunque. Finché il set non è così grande e non lo chiami quello spesso, nessun grosso problema.
uso '[MySet allObjects]' che restituirà un array e quindi usa la tua logica esistente per ottenere un indice casuale –
bbum preso da un grosso errore che ho fatto nella mia risposta, grazie. Eliminata. – Almo
Vuoi casuale, o semplicemente non ti interessa quale? Specificamente, voglio dire, "Sei a conoscenza di' - [NSSet anyObject] '?" –