3 일 동안 고치려는 문제로 어려움을 겪고 있습니다. 도움이 필요합니다.iOS5에서 NSObject를 선택하는 것은 UITableView = EXC_BAD_ACCESS입니다.
내 TicketTableViewController.m 파일에서 각 Ticket 값이있는 사용자 지정 NSObject (Ticket)의 NSMutableArray를 만듭니다.
Ticket *ticketFound = [[Ticket alloc] initWithTicketNumber:ticketString locationNumber:locationString clerkNumber:clerkString approvedState:approvedState approvedDetail:approvedDetail totalNumber:[totalString floatValue] tipNumber:[tipString floatValue] balanceNumber:[subtotalString floatValue] ticketItemsArray:nil ticketItemsDict:nil];
티켓의 승인 상태에 따라 배열에 추가합니다.
if ([approvedState isEqualToString:@"approved"]) {
[self.approvedTickets addObject:ticketFound];
}
else if ([approvedState isEqualToString:@"declined"]) {
[self.declinedTickets addObject:ticketFound];
}
else if ([approvedState isEqualToString:@""]){
[self.openTickets addObject:ticketFound];
}
그때는 NSDictionary의 이러한 배열을 추가 해요
다음 this tutorial에 따라 글로벌 NSArray *tickets
에 ; 이 글로벌 NSArray *tickets
세트
NSDictionary *openDict = [NSDictionary dictionaryWithObject:self.openTickets forKey:@"tickets"];
NSDictionary *decDict = [NSDictionary dictionaryWithObject:self.declinedTickets forKey:@"tickets"];
NSDictionary *approvDict = [NSDictionary dictionaryWithObject:self.approvedTickets forKey:@"tickets"];
[self.tickets addObject:openDict];
[self.tickets addObject:decDict];
[self.tickets addObject:approvDict];
, 나는 그 (튜토리얼에 따라)를 구분 jQuery과의 모든 티켓을 표시 할 수 있습니다. 배열의 각 티켓에서 정보를 가져 와서 표시하는 사용자 지정 셀을 사용하고 있습니다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"TicketCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDictionary *dictionary = [self.tickets objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"tickets"];
Ticket *ticket = [array objectAtIndex:indexPath.row];
UILabel *locationLabel = (UILabel *)[cell viewWithTag:100];
locationLabel.text = [NSString stringWithFormat:@"Location: %@", ticket.locationNumber];
UILabel *ticketLabel = (UILabel *)[cell viewWithTag:101];
ticketLabel.text = [NSString stringWithFormat:@"Ticket: %@", ticket.ticketNumber];
UILabel *balanceLabel = (UILabel *)[cell viewWithTag:102];
balanceLabel.text = [NSString stringWithFormat:@"$%.2f", ticket.balanceNumber];
return cell; }
이것은 완벽하게 작동합니다 (문제는 해결되지만 일단 해결할 다른 문제 임에도 불구하고). 내 문제는 다음 사용자가 UITableView에서 티켓을 선택하면 온다. 내가 선택한 행의 티켓에서 데이터의 일부를 호출하려고 시도하면 EXC_BAD_ACCESS
오류로 앱이 다운됩니다. 여기 내 코드가있다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *dictionary = [self.tickets objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"tickets"];
Ticket *ticket = [array objectAtIndex:indexPath.row];
NSLog(@"float: %@", ticket.balanceNumber); //this causes the crash }
나는 내가 NSLog(@"class: %@", [ticket class]);
를 넣어 경우 때문에 티켓 (NSObject의)를 반환하고 티켓 (NSObject의)를 반환 Ticket *ticket...
id ticket...
에 변경 해요 알고있다.
나는 모든 조언을 주셔서 감사합니다.
미리 감사드립니다.
감사합니다,
댄
편집 :이 날 float를 반환하기 위해 노력하고 %@
보다는 %f
를 사용하여 아무 없다 - 나는 문자열, 응용 프로그램이 충돌되는 NSLog(@"ticketNumber: %@", ticket.ticketNumber);
을 시도 할 경우에도 있습니다.
%를 사용하지 않으므로 충돌 할 수 있습니다.NSLog 문에서 2f. –
또한 티켓 배열에 배열을 만들면 어떨까요? 나는 왜 당신이 사전에 넣는 지 알지 못한다. 그것은 불필요한 여분의 단계처럼 보인다. 그냥 [self.tickets objectAtIndex : [indexPath.section]]'이 임의의 사전을 거기에 추가하는 추가 단계를 거치지 않고 배열을 반환하도록하십시오. –
그러나 섹션에 표시 할 다른 배열을 어떻게 분리합니까? 튜토리얼을 사용하고 워크 플로우가 이전보다 훨씬 더 엄격 해 보였기 때문에 NSDictionary 만 사용했습니다. –