2015-04-07 3 views
0

У меня есть три изменяемых массивовПолучение NSMutableDictionary ключа из двух изменяемых массивов

@interface PickeriviewAndTableViewController() 
//Create mutableArray for tableView 

@property(strong,nonatomic)NSMutableArray *msgYear; 
@property(strong,nonatomic)NSMutableArray *msgSeason; 
@property(strong,nonatomic)NSMutableArray *msgCourse; 

Я хочу, чтобы добавить элемент в массив msgCourse[ ] с помощью ключа генерации из первых двух массивов msgYear[ ] и msgSeason[ ].

Тогда я хочу, чтобы заполнить [] массив msgCourse с помощью кнопки

- (IBAction)addCourse:(UIButton *)sender { 


    //To get value from pickerView, prepare for key and contents 

    NSInteger numRow=[picker selectedRowInComponent:kNumComponent];//0=1st,1=2nd,etc 
    NSInteger SeaRow=[picker selectedRowInComponent:kSeaComponent];//0=fall,1=spring,2=summer 
    NSInteger CourseRow=[picker selectedRowInComponent:kCourseComponent]; 

    NSString *num=Number[numRow]; 
    NSString *season=Season[SeaRow]; 
    NSString *course=Course[CourseRow]; 

    NSString *CourseToAdd=[[NSString alloc ]initWithFormat:@"%@ ",course]; 
    NSString *SeasonToAdd=[[NSString alloc ]initWithFormat:@"%@ ",season]; 
    NSString *YearToAdd=[[NSString alloc ]initWithFormat:@"%@ ",num]; 

// Try to generate key from YearToAdd and SeasonToAdd and fill in content 
    NSMutableArray *keys = [[NSMutableArray alloc] init]; 
    NSMutableDictionary *contents = [[NSMutableDictionary alloc] init]; 

    NSString *keyFromYearAndSeason = @"Don't_know_what_to_do_here"; 
    [contents setObject:[NSArray arrayWithObjects:@"Don't_know_how", nil] forKey:keyFromYearAndSeason]; 

[keys addObject:keyFromYearAndSeason]; 

[self setSectionKeys:keys]; 
[self setSectionContents:contents]; 

} 

Мой вопрос: Как заполнять свой код, заменив их «Не знаю, как» строки кода здесь, пожалуйста?

Обновление: для большей ясности ключ генерируется от msgYear[ ] и msgSeason[ ], например. '2001 fall', словарь заполняется курсом, например. «Химия», «математика».

+0

Непонятно, что вы пытаетесь сделать. Когда вы говорите «ключ из года и сезона», вы имеете в виду просто конкатенированную строку - например, «2014fall»? И каковы объекты, которые вы хотите поместить в массив в словаре? – Paulw11

+0

Спасибо за ваш ответ. Да, клавиша - это конкатенированная строка. «2014 падение» (с пробелом), в словаре, я хочу поставить курс, например. элементы из 3-го массива. – user4441082

+0

Для ключа просто конкатенировать строки - '[NSString stringWithFormat: @"% @% @ ", num, season]' Я не вижу массив курсов - просто строку курса. – Paulw11

ответ

1

Ссылка на другой вопрос помогла обеспечить контекст того, чего вы пытаетесь достичь.

Вам не нужно создавать словарь или массив внутри метода addButtton - у вас должен быть ваш словарь как свойство, которое уже инициализировано. Затем в кнопке добавления вы получаете массив, связанный с ключом - если значение равно nil, тогда вы создаете новый массив и включаете курс. Если значение не равно nil, просто добавьте курс в массив.

@property (strong,nonatomic) NSMutableDictionary *tableEntries; // alloc/init this in viewDidLoad 


- (IBAction)addCourse:(UIButton *)sender { 

    //To get value from pickerView, prepare for key and contents 

    NSInteger numRow=[picker selectedRowInComponent:kNumComponent];//0=1st,1=2nd,etc 
    NSInteger SeaRow=[picker selectedRowInComponent:kSeaComponent];//0=fall,1=spring,2=summer 
    NSInteger CourseRow=[picker selectedRowInComponent:kCourseComponent]; 

    NSString *num=Number[numRow]; 
    NSString *season=Season[SeaRow]; 
    NSString *course=Course[CourseRow]; 

    NSString *key=[NSString stringWithFormat:@"%@ %@",num,season]; 

    NSMutableArray *courses=self.tableEntries[key]; 
    if (courses == nil) { 
     courses=[NSMutableArray new]; 
     self.tableEntries[key]=courses; 
    } 

    [courses addObject:course]; 

} 

NSDictionary s является неупорядоченным, поэтому вам нужно подумать о том, как вы хотите, чтобы упорядочить данные в таблице. Вы можете использовать массив для хранения ключей, как в исходном коде, а затем отсортировать этот массив.

+0

Большое спасибо за вашу помощь. – user4441082

Смежные вопросы