0

EventObject の配列があります。各オブジェクトには、タイトルと都市、およびその他の多くの属性があります。セルのタイトルをイベントタイトル、セルのサブタイトルをイベント都市として表示したいです。次のようにしてみましたが、最後のオブジェクトが 4 回しか表示されません (つまり、配列内のオブジェクトの数です)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

//    NSDate *object = _objects[indexPath.row];
//    cell.textLabel.text = [object description];

    EventObject *eventInstance = [[EventObject alloc] init];
    int row = [indexPath row];

    eventInstance = eventObjectsArray[row];
    cell.textLabel.text = eventInstance.eventTitle;
    NSLog(@"Event Title: %@", eventInstance.eventTitle);
    cell.detailTextLabel.text = eventInstance.eventCity;

    return cell;
}

私は何を間違えましたか?私はobjective-cを学んでいるので、初心者はきっと間違います。ありがとう

編集:これは私がオブジェクトを挿入する方法です:

 //get events from database
    eventsDictionary = [eventInstance getEventsObjects];

    //process each key in dictionary and assign to eventInstance
    for(id key in eventsDictionary)
    {
         eventInstance.eventId = [NSString stringWithFormat:@"%@", key[@"id"]];
         eventInstance.eventTitle = [NSString stringWithFormat:@"%@", key[@"title"]];
         eventInstance.eventDescription = [NSString stringWithFormat:@"%@", key[@"description"]];
         eventInstance.eventCity = [NSString stringWithFormat:@"%@", key[@"city"]];
         [eventObjectsArray addObject:eventInstance];
    }
4

1 に答える 1

1

提案

[これは問題になる可能性があります]

eventObjectsArray にオブジェクトを追加するときは、オブジェクトを追加する前に、毎回 EventObject の新しいインスタンスがあることを確認してください

EventObject *eventInstance = [[EventObject alloc] init];
eventInstance.eventTitle = @"your title";
eventInstance.eventCity  = @"your city";
[eventObjectsArray addObject:eventInstance];

[これは、コーディング標準とメモリ管理を改善するためにこれを知っておく必要があるための提案です]

配列からオブジェクトを取得している間、カスタムオブジェクトのインスタンスを実際に持つ必要はなく、そのように参照する必要があります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    //EventObject *eventInstance = [[EventObject alloc] init]; //you don't need this
    int row = [indexPath row];

    EventObject *eventInstance = eventObjectsArray[row]; // make reference like this
    cell.textLabel.text = eventInstance.eventTitle;
    NSLog(@"Event Title: %@", eventInstance.eventTitle);
    cell.detailTextLabel.text = eventInstance.eventCity;

    return cell;
}
于 2013-03-27T16:13:16.917 に答える