Вы должны сохранить r при удалении из массива.Теперь вы удалите его и установите его указатель на currentItem.Счетчик сохранения должен стать 0, что, вероятно, приведет к ошибке.У вас есть два варианта.
1) Добавьте свойство в вашем интерфейсе:
@property (retain) NSString *currentItem;
и добавьте его в свою реализацию
@synthesize currentItem;
, затем используйте
self.currentItem = ...
вместо
currentItem = ...
2) Используйте правильное управление памятью.См. Измененный код:
-(NSString *) getNextRandomItem {
if (binNew.count > 0){
if (currentItem) {
[binUsed addObject:currentItem];
[currentItem release]; //See here
currentItem = nil; //See here
}
int r = floor(arc4random() % binNew.count);
currentItem = [[binNew objectAtIndex:r] retain]; //See here
[binNew removeObjectAtIndex:r];
return currentItem;
} else {
[currentItem release];
currentItem = nil;
}
return @"No more items!";
}
Обратите внимание, что в настоящее время вы никогда не устанавливаете свой currentItem на ноль.Ты должен сделать это.