[英]segue not working with UITableViewCell alloc, but 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.