2012-01-05 83 views
0

我正在爲EmployeeContactDirectory設計一個簡單的基於導航的應用程序。我正在顯示Employee的列表。爲了顯示員工名單,我使用restfull webservice。我正在得到適當的迴應。我有一個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); 

那麼,請告訴我,我怎麼可以設置數據進入tableview當我使用NSDictionary。當用戶點擊tableview的行時,它將返回所選僱員的ID。

回答

0

替代線路

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

嘗試以下的,

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

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

由於它會被自動釋放,這可能是內存不足。

0

你需要實現一個名爲

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

在這裏你會得到部分&行的表點擊的tableView委託方法