2012-06-13 2 views
1

У меня есть массив объектов. Каждый объект имеет свойство «дата» и «название». Я хочу, чтобы заполнить секционный UITableView с этими элементами, как:iphone - Создать NSMutableDictionary, заполненный NSMutableArrays динамически

Section 1 - 2012.06.12 (taken from object.date) 
    Cell 1.1: Title 1 (taken from object.name) 
    Cell 1.2: Title 2 
    Cell 1.3: Title 3 
    ... 
Section 2 - 2012.06.13 
    Cell 2.1: Title 1 
    Cell 2.2: Title 2 
    .. 
Section 3 .. 

Я могу сделать это путь создания вручную 1..n NSMutableArrays для всех date комбинаций и наполняя их object.name значений. Но проблема в том, что я не знаю, сколько комбинаций date есть, поэтому это нужно делать динамически. Кроме того, date свойства может повторяться в различных объектах Моя структура объекта:

Object 
-NSDate - date 
-NSString - title 

UPD:

Я думаю, если это возможно, чтобы создать NSDictionary, где ключ будет моя датой и объектом будет NSArray, который содержит все мои элементы для ключа-даты. Но я не знаю, как это сделать динамично.

Надеюсь, я достаточно подробно объяснил свой вопрос. Спасибо заранее!

+0

В каждом объекте есть 3 названия? Можете ли вы показать свою структуру объекта? –

+0

Откуда вы набираете даты? –

+0

Я обновил свой вопрос. Каждый объект имеет только один заголовок. Заголовки в примерах взяты из разных объектов. – Oleg

ответ

2

Вы можете создавать массивы на основе date.You имеют массив объектов, поэтому перебирать через этот массив объектов, чтобы получить определенные даты, следующим образом:

for(int i =0;i<[objectsArr count];i++) 
{ 
    if(![newDateArr containsObject:[objectsArr objectAtIndex:i].date]) 
    { 
     [newDateArr addObject:[objectsArr objectAtIndex:i].date]; 
    } 
    NSMutableArray *newTitleArray = [newTitleDictionary objectForKey:@"[objectsArr objectAtIndex:i].date"]; 
    if(newTitleArray != nil) 
    { 
     [newTitleArray addObject:[objectsArr objectAtIndex:i].title]; 
    } 
    else 
    { 
     newTitleArray = [[[NSMutableArray alloc] init] autorelease]; 
     [newTitleArray addObject:[objectsArr objectAtIndex:i].title]; 
    } 
    [newTitleDictionary setValue:newTitleArray forKey:@"[objectsArr objectAtIndex:i].date"]; 
} 

где newTitleDictionary и newDateArr являются объявить вне этого метода. Теперь вы можете использовать оба: newTitleDictionary и newDateArr для заполнения tableview.

+0

Отличная идея! Я сделал это таким же образом, и он работает! Спасибо! – Oleg

+0

Я рад, что ваша проблема решена. –

0

Если я правильно понял вас, вы хотите поместить объект в массив, а затем использовать этот массив для заполнения табличного представления?

Просто добавьте объект даты каждый раз в NSMutableArray.

[myArray addObject:dateObject]; 

Затем, когда речь идет о наполнении табличных ..

DateObject *newDateObj = [myArray objectAtIndex:index]; 

Я надеюсь, что это помогает, и я понял ваш вопрос

EDIT Чтобы ответить теперь я понимаю немного больше.

Шаг 1 Проверить через существующий массив дат и посмотреть, если есть какие-либо, что соответствует возможно итерируя через него, используя для цикла. Поиск в Интернете, как сравнить NSDate.

Шаг 2 Если не матча любым затем вставить его в массив как массив только с этой датой его собственного, так что граф массив будет один. Если он делает, то вставьте его в массив вместе с тем, что делает массив числом 2 или более.

Шаг 3 Когда дело доходит до объявления суммы раздела для таблицы, просто верните значение dateHolderArray count.

Шаг 4 При объявлении количества строк в каждом разделе возвратите массив для массива, который находится внутри dateHolderArray.

Этап 5 Отображение содержимого, когда дело доходит до заполнения ячеек информацией. Это становится задачей получения дат из массивов с использованием идентификаторов раздела и идентификаторов строк.

Вот как бы я это сделал, возможно, есть много других методов. Любые вопросы, просто спросите

+0

Я не могу так поступать, потому что могут повторяться даты – Oleg

+0

, поэтому вы хотите проверить, совпадает ли дата с другим в массиве, и если это возможно, добавьте это в новый массив поэтому они сгруппированы под одной датой? – StuStirling

+0

да! и создать новую запись, если дата не то же самое – Oleg