簡體   English   中英

NSMutableArray屬性在dequeueReusableCellWithIdentifier中不起作用

[英]NSMutableArray property is not working in dequeueReusableCellWithIdentifier

我有一個視圖控制器,其中嵌入了tableView。 我有以下代碼。

@property (nonatomic, strong) NSMutableArray* eventArray;

- (void)viewDidLoad {

    [super viewDidLoad];
    self.eventTableView.delegate = self;
    self.eventTableView.dataSource = self;

     if (!self.eventArray){
        self.eventArray = [[NSMutableArray alloc] init];
     }

    ...

    for(NSDictionary* dict in responseObject){

            [self.eventArray addObject:[[Event alloc] initWithEventName:[dict valueForKey:@"Name"]eventDescription:[dict valueForKey:@"Description"]]];
        }

    [self.eventTableView reloadData];
}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    for(Event* event in self.eventArray)
    {
        NSLog(@"Event Name in numberofRows: [%@]", [event eventName]);
    }
    return [self.eventArray count];
}



- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *MyIdentifier = @"EventCell";

    EventTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    Event* eventForCell = (Event*)[self.eventArray objectAtIndex:[indexPath row]];

    NSLog(@"eventArraySize [%lu]", [self.eventArray count]);

    for(Event* event in self.eventArray)
    {
        NSLog(@"Event Name: [%@]", [event eventName]);
    }


    [cell.eventNameLabel setText: [eventForCell eventName]];
    return cell;
}

在代碼運行過程中,我看到對象已成功添加到eventArray中,我在numberOfRowsInSection中打印的日志循環將打印以下內容

Event Name in numberofRows: [Worship Rehearsal]
Event Name in numberofRows: [Worship Rehearsal]
Event Name in numberofRows: [Worship Rehearsal]

cellForRowAtIndexPath中的相同循環將輸出以下內容

eventArraySize [3]
Event Name: [(null)]
Event Name: [(null)]
Event Name: [(null)]

我已經嘗試過使用其他屬性,並且能夠正確訪問它們。 謝謝你的幫助。

您的活動名稱為nil。 這是因為初始化數組時出現問題。

這是錯誤的[dict valueForKey:@"Name"]

使用此[dict objectForKey:@"Name"]

或者簡單地dict[@"Name"]

要為每個單元格打印事件名稱,您可以嘗試使用此代碼嗎?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *MyIdentifier = @"EventCell";

    EventTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    Event* eventForCell = (Event*)[self.eventArray objectAtIndex:[indexPath row]];

    NSLog(@"eventArraySize [%lu]", [self.eventArray count]);

    //for(Event* event in self.eventArray)
    //{
    //   NSLog(@"Event Name: [%@]", [event eventName]);
    //}
    //Commenting above code

    NSLog(@"Event Name: [%@]", [eventForCell eventName]);

    [cell.eventNameLabel setText: [eventForCell eventName]];
    return cell;
}

感謝您的幫助,我能夠解決此問題。 問題出在我的事件對象中,屬性設置為弱引用而不是強引用。 一旦我將它們更改為:

@property (strong, nonatomic) NSString *eventName;

對象開始按預期方式工作。 數組本身正常工作,但是事件對象內部的字段已釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM