2015-09-27 5 views
0

Итак, у меня есть «еда», которая имеет три типа: «Питание, десерты и закуски». У меня есть эти категории, прикрепленные к кнопкам на странице «Параметры поиска», и они в основном делают «Выберите * из пищи, где тип =« Питание », и это прекрасно работает.Objective-C: Randomizer objectAtIndex Не сортировка по всем типам

Проблема в том, что когда я пытаюсь случайно получить объект из «Все» («select * from food»), он возвращает только питание. Я думаю, что проблема с «objectAtIndex: 0»?

ranDom = [_entries bjl_shuffledArray]; 
     Place *p = [ranDom objectAtIndex:0]; 

Так что я попытался рандомизации индекс а:

NSInteger randomIndex = arc4random()%[_entries count]; 
     ranDom = [_entries bjl_shuffledArray]; 
     Place *p = [ranDom objectAtIndex:randomIndex]; 

... но она по-прежнему кажется, что получение только результатов питание ... не двух других типов в «пища» ,

Любая идея, как я могу получить ее для лучшего возвращения результатов из всех трех типов?

EDIT: Вот как bjl_shuffled_array работы:

- (NSArray *)bjl_shuffledArray 
{ 
    NSMutableArray *shuffledArray = [self mutableCopy]; 
    NSUInteger arrayCount = [shuffledArray count]; 

    if (arrayCount > 0) { 
    for (NSUInteger i = arrayCount - 1; i > 0; i--) { 
     NSUInteger n = arc4random_uniform(i + 1); 
     [shuffledArray exchangeObjectAtIndex:i withObjectAtIndex:n]; 
    } 
    } 
    return [shuffledArray copy]; 
} 
+0

Вы использовали отладчик для подтверждения того, что именно находится в 'ranDom' и' _entries'? Я подозреваю, что это, вероятно, корень проблемы. Вам определенно не нужно будет рандомизировать индекс, если вы перетасовали массив. Также 'arc4random()% [_entries count]' будет сбой с ошибкой div на ноль, если ваш массив 'entries' всегда пуст. Можете ли вы показать реализацию 'bjl_shuffledArray'? –

+0

Добавлен код для bjl_shuffledarray. Я не смог понять, как правильно его регистрировать. RandomIndex ... конечно ... дает мне случайный индекс (последний был 21). ranDom немного страннее ... Это дало мне 30 записей из 300 доступных. Последний был: «<Место: 0x15687b80>», я использовал: NSLog (@ «ranDom:% @», ranDom); Как я исхожу отсюда? И есть ли способ, который я могу точно увидеть, что содержится в этом массиве? –

+1

Метод перетасованного массива в порядке. Что касается вывода отладки, lldb иногда урезает outpu - но вы можете быть уверены, сколько элементов в массиве, зарегистрировав свой счет i.e.:. 'NSLog (@"% d ", [array count]);" Или же итерация по массиву с циклом for и запись каждого элемента по отдельности - либо путем регистрации элемента, либо вызова некоторого метода на нем, который скажет вам, что это такое (Или используйте 'NSStringFromClass ([item class])'). Я задаюсь вопросом, связана ли проблема с тем, как в первую очередь заполняется «lentries». –

ответ

0

Так "_entries" было только возвращение 30 результатов. Я знал, что должен быть предел где-то, потому что должно было быть около 306 предметов. Сначала я проверил весь код приложения на номер «30» и ничего не нашел. Поэтому я проверил через файл PHP и обнаружил, что кто-то пробрался в этом:

$rows_per_page = 30; 

Изменено «30» до «3000», и теперь все в порядке с миром. Спасибо вам, Rich Tolley за вашу помощь.

+0

Не беспокойтесь! Рад помочь –