簡體   English   中英

為什么在顯示此表視圖時看到崩潰?

[英]Why am I seeing a crash when displaying this table view?

我正在為EmployeeContactDirectory設計一個基於導航的簡單應用程序。 我正在顯示員工列表。 為了顯示員工列表,我使用了restfull Web服務。 我得到了適當的回應。 我有一個用於Employee Data的實用程序類,該類是EmployeeData.h和Employee.m(包含employeeId,employeeFirstName和employeeLastName)。 我的解析代碼

// Code for parsing the response and getting desired field into the dictionary object and add the dictionaries into the array.     
    -(void)finishedReceivingData:(NSData *)data {   
        NSData *dataRes = [[restConnection stringData] dataUsingEncoding:NSUTF8StringEncoding];
        ////////////////Parsing with XPathQuery Start//////////////////////
        if (dataRes != NULL) {
        employeeData = [[EmployeeData alloc] init];
        NSString *xPathQuery = [NSString stringWithFormat:@"/*",employeeData.employeeID];
        NSArray *arrayWithObjectList = PerformXMLXPathQuery(dataRes, xPathQuery);
        for(NSDictionary *childOfObjectList in arrayWithObjectList){
        NSArray *arrayOfDataValueObj = (NSArray *)[childOfObjectList objectForKey:@"nodeChildArray"];
       for(NSDictionary *childObjListDict in arrayOfDataValueObj){
       NSArray *childObjListDataValue = (NSArray *)[childObjListDict objectForKey:@"nodeChildArray"];
       for(NSDictionary *childDict in childObjListDataValue){
    if([[childDict objectForKey:@"nodeName"] isEqualToString:@"FName" ])
       {
       employeeData.employeeFirstName = [childDict objectForKey:@"nodeContent"];
       }
       if([[childDict objectForKey:@"nodeName"] isEqualToString:@"EmpID"])
       {
       employeeData.employeeID = [childDict objectForKey:@"nodeContent"];
       }
       }
       //employeeFirstNameArray = [NSArray arrayWithObjects:employeeData, nil];
       employeeIDArray = [NSArray arrayWithObjects:employeeData, nil];
       dictionaryEmployeeFirstName = [NSDictionary dictionaryWithObject:employeeData.employeeFirstName forKey:@"employeeData"];
       dictionaryEmployeeID = [NSDictionary dictionaryWithObject:employeeData.employeeID forKey:@"employeeData"];
       tempArray = [NSArray arrayWithObjects:dictionaryEmployeeFirstName, dictionaryEmployeeID, nil];
       NSLog(@"size of temp %d",[tempArray count]);
       }
       }
      //[employeeData release];
      //employeeData = nil;
      }
      [self.tableviewEmloyeeList reloadData];
    //////////////////////////////Parsing with XPathQuery end//////////
    } 


    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        } 
        // Configure the cell..
       NSDictionary *dictionaryEmployee = [tempArray objectAtIndex:indexPath.row];
       NSArray *firstNameArray = [dictionaryEmployee objectForKey:@"employeeData"];
       NSString *cellValue = [firstNameArray objectAtIndex:indexPath.row];
       NSLog(@"cellValue %@",cellValue);
       cell.textLabel.text = cellValue;

       return cell;
    }

這行代碼進入執行流程時,我收到消息(Exc_bad_Access):

NSDictionary *dictionaryEmployee = [tempArray objectAtIndex:indexPath.row]

The EXC_Bad_Access is at the mail.m file at line nt retVal = UIApplicationMain(argc, argv, nil, nil);

因此,請告訴我使用NSDictionary時如何將數據設置到表視圖中。 當用戶單擊表視圖的行時,它將返回所選員工的ID。

代替線

tempArray = [NSArray arrayWithObjects:dictionaryEmployeeFirstName, dictionaryEmployeeID, nil];

試試以下,

if( tempArray )
{
   [tempArray release];
   tempArray = nil;
}

tempArray = [[NSArray arrayWithObjects:dictionaryEmployeeFirstName, dictionaryEmployeeID, nil] retain];

由於它是自動釋放的,因此它可能內存不足。

您需要實現一個名為的tableView委托方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

在這里,您將在表中單擊該節和行

暫無
暫無

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

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