选择两次相同的行时,UITableView崩溃 [英] UITableView crashes when the same row is selected twice

查看:79
本文介绍了选择两次相同的行时,UITableView崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我运行应用程序并选择一行时,它会将一些信息传递给EmployeeInfoPage并且工作正常。当我回击然后选择相同的行。它在行tableController.empInfo = employee;崩溃了。我收到一个EXC_BAD_ACCESS错误

When i run the app and select a row it passes some information to EmployeeInfoPage and works fine. When i hit back and then select the same row. It crashes at the line tableController.empInfo = employee;. I get a EXC_BAD_ACCESS error

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{   
EmployeeInfoTableView *tableController = [[EmployeeInfoTableView alloc] init];

NSDictionary *employee = [[self.orderedSections valueForKey:[[[self.orderedSections allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];

tableController.empInfo = employee;    

[self.navigationController pushViewController:tableController animated:YES];    

[tableController release];
}

这是EmployeeInfoTableView.h文件

This is the EmployeeInfoTableView.h file

@interface EmployeeInfoTableView : UITableViewController <UIActionSheetDelegate , MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate>{

    NSDictionary *empInfo;
    NSString *currentPhoneNumber;
    NSString *currentEmail;

    UIActionSheet *callConfirm;
}

然后我使用empInfo在tableview中设置某些字段。

Then i use empInfo to set certain fields in the tableview.

这是我的dealloc方法

This is my dealloc method

- (void)dealloc{
    [super dealloc];
    [empInfo dealloc];
    [currentEmail dealloc];
    [currentPhoneNumber dealloc];
    [callConfirm dealloc];
}

我的错误是因为我需要释放我的任何物品吗?

Is my error becuase i need to release any of my objects?

这是我从iPhone上得到的错误,我真的不知道怎么读这个。

This is the error i got from off my iPhone, i really have no idea how to read this.

  Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xb001fb49
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x31798c98 objc_msgSend + 16
1   libobjc.A.dylib                 0x317a24d2 objc_setProperty_non_gc + 62
2   libobjc.A.dylib                 0x3179a040 objc_setProperty + 20
3   CorporateDirectory              0x0000e5f0 0x1000 + 54768
4   CorporateDirectory              0x00003ac2 0x1000 + 10946
5   UIKit                           0x32cc3514 -[UITableView                                         _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656
6   UIKit                           0x32d270e4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 124
7   Foundation                      0x338266ce __NSFireDelayedPerform + 362
8   CoreFoundation                  0x345f4a40     __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
9   CoreFoundation                  0x345f6ec4 __CFRunLoopDoTimer + 844
10  CoreFoundation                  0x345f783e __CFRunLoopRun + 1082
11  CoreFoundation                  0x34587ebc CFRunLoopRunSpecific + 224
12  CoreFoundation                  0x34587dc4 CFRunLoopRunInMode + 52
13  GraphicsServices                0x322b2418 GSEventRunModal + 108
14  GraphicsServices                0x322b24c4 GSEventRun + 56
15  UIKit                           0x32c9dd62 -[UIApplication _run] + 398
16  UIKit                           0x32c9b800 UIApplicationMain + 664
17  CorporateDirectory              0x00002a52 0x1000 + 6738
18  CorporateDirectory              0x00002a10 0x1000 + 6672




Thread 1:
0   libsystem_kernel.dylib          0x339663ec __workq_kernreturn + 8
1   libsystem_c.dylib               0x3480f6d8 _pthread_wqthread + 592
2   libsystem_c.dylib               0x3480fbbc start_wqthread + 0

Thread 2 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0   libsystem_kernel.dylib          0x33966fbc kevent + 24
1   libdispatch.dylib               0x322df032 _dispatch_mgr_invoke + 706
2   libdispatch.dylib               0x322e003a _dispatch_queue_invoke + 86
3   libdispatch.dylib               0x322df5ea _dispatch_worker_thread2 + 186
4   libsystem_c.dylib               0x3480f58a _pthread_wqthread + 258
5   libsystem_c.dylib               0x3480fbbc start_wqthread + 0

Thread 3 name:  WebThread
Thread 3:
0   libsystem_kernel.dylib          0x33963c00 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33963758 mach_msg + 44
2   CoreFoundation                  0x345f52b8 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x345f7562 __CFRunLoopRun + 350
4   CoreFoundation                  0x34587ebc CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x34587dc4 CFRunLoopRunInMode + 52
6   WebCore                         0x3666927e _ZL12RunWebThreadPv + 382
7   libsystem_c.dylib               0x3480e30a _pthread_start + 242
8   libsystem_c.dylib               0x3480fbb4 thread_start + 0

Thread 0 crashed with ARM Thread State:
r0: 0x0016c020    r1: 0x32f63814      r2: 0x000000a8      r3: 0x0016c020
r4: 0xb001fb41    r5: 0x00000000      r6: 0x001eeca8      r7: 0x2fdfe8c4
r8: 0x00a1da00    r9: 0x0016c020     r10: 0x00000003     r11: 0x00161a50
ip: 0x00000000    sp: 0x2fdfe8a4      lr: 0x317a24d9      pc: 0x31798c98

cpsr:0x00000030

cpsr: 0x00000030

推荐答案

尝试删除此行

[tableController release];

。当我们尝试访问先前发布的变量时,抛出 EXC_BAD_ACCESS 错误。您同时使用 tableController 发布 NSDictionary * employee 对象。

from your didSelectRowAtIndexPath method. The EXC_BAD_ACCESS error is thrown when we try to access a variable that was released previously. You're simultaneously releasing NSDictionary *employee object with tableController.

编辑:为防止您的词典被释放,您可以复制字典所需的内容为 tableController.empInfo = [员工复制] ; 然后发布最适合这种情况的 tableController

To prevent your dictionary from being released, you can copy the required contents of the dictionary as tableController.empInfo = [employee copy]; and then release tableController which would suit this situation best.

这篇关于选择两次相同的行时,UITableView崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆