как получить значения из nsdictionary в iphone? - PullRequest
0 голосов
/ 14 июня 2009

я использую функцию для заполнения словаря в массиве вот код

    -(void)getAllFlashCardsNames
 {
if ([listofitems count]==0)
    listofitems = [[NSMutableArray alloc] init];
else
    [listofitems removeAllObjects];

for(int i=0;i<listOfCategoryId.count;i++)
{   
    int j=[[listOfCategoryId objectAtIndex:i]intValue];
    [self getFlashCard:j];      
    NSArray *flashCardsNames = flashCardsNamesList;
    NSArray *flashCardsids = flashCardsId;
    NSLog(@"FLash Card Ids %@",flashCardsids);      
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:flashCardsNames,@"flashCards",flashCardsids,@"flashCardId",nil];
    [listofitems addObject:dictionary];

}

}

в приведенном выше коде массив flashcardsNamesList, flashCardsId изменяется каждый раз при вызове функции [self getFlashCard: j]; j - параметр для изменения categoryid, который поступает из массива listOfCategoryId ..

теперь, как мне извлечь значения из словаря, я хочу показать разные flashcardsNames в разных разделах в uitableview.

вот код, который я использую для получения значений

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return [listofitems count];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section   {   
    NSDictionary *dictionary =[listofitems objectAtIndex:section];
    NSLog(@"dictionary=%@",dictionary);
    NSArray *array =[dictionary objectForKey:@"flashCards"];
    NSLog(@"array=%@",array);
    NSLog(@"Section Count = %d",array.count);
    return array.count; 
}   



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {   
    static NSString *CellIdentifier = @"Cell";  
    CustomCell *cell = (CustomCell   *)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) {      
        cell = [[[CustomCell alloc] initWithFrame:CGRectZero     reuseIdentifier:CellIdentifier] autorelease];      
    }   

    NSDictionary *dictionary =[listofitems objectAtIndex:indexPath.section];
    NSArray *array =[dictionary objectForKey:@"flashCards"];
    NSArray *array1=[dictionary objectForKey:@"flashCardId"];
    NSString *cellValue=[array objectAtIndex:indexPath.row];
    NSString *cellValue1=[array1 objectAtIndex:indexPath.row];
    [cell.FlashCardsNames setText:cellValue];
    [cell setFlashCardId:[cellValue1 intValue]];
    return cell;
}

но метод - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath не вызывается

1 Ответ

3 голосов
/ 14 июня 2009

но метод -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath не вызывается

Вы установили объект, в котором реализован ваш метод, в качестве источника данных вашего табличного представления? UITableView передает часть работы другому объекту, который должен соответствовать протоколам UITableViewDataSource и UITableViewDelegate; Затем вы должны установить объект как dataSource и delegate табличного представления, либо в IB, либо программно (источником данных и делегатом могут быть разные объекты, но обычно это один и тот же объект). Взгляните на эту статью , которая объясняет больше об этом; как только это будет сделано, ваш объект должен обработать методы tableView:cellForRowAtIndexPath: и tableView:numberOfRowsInSection:, которые будут вызываться для вашего объекта табличным представлением.

Также строки:

if ([listofitems count]==0)
    listofitems = [[NSMutableArray alloc] init];

не имеет смысла. Я предполагаю, что вы проверяете, был ли массив выделен или нет, и если нет, чтобы выделить его. Если массив не был выделен , он будет nil, поэтому отправка count в любом случае не будет иметь никакого эффекта. Если он был выделен ранее, но освобожден, но не возвращен обратно к nil, это будет неверный указатель и вызовет сбой вашего приложения.

Лучший способ выделить его - сделать это в методе awakeFromNib вашего класса или applicationDidFinishLaunching:, если вы реализуете это в своем подклассе UIApplicationDelegate. Не забудьте выпустить его в вашем dealloc методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...