uibarbuttonitem 버튼을 클릭하면 iPhone 앱이 충돌합니다
-
21-08-2019 - |
문제
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL];
rButton.action = @selector(refreshAction);
self.navigationItem.rightBarButtonItem = rButton;
[rButton release];
위의 코드는 버튼을 만들고 내비게이션 막대에 추가하는 데 잘 작동하지만 버튼을 클릭하면 exc_bad_access로 앱이 충돌합니다. rbutton.action = @Selector (RomfressAction)에 주석을 달면; 버튼을 클릭하면 아무것도하지 않지만 중단되지 않습니다.
- (void)refreshAction {
NSLog(@"refreshAction");
}
이 코드는 NavigationViewController ViewDidload 메소드에서 NavigationController 스택으로 푸시되는 TableViewController의 ViewDidload 메소드에 있습니다.
나는 아마도 이것을 작동시키기 위해 3 시간을 보냈다.
해결책
평소와 같이 메모리 관리는 범인이었습니다. NavigationController에서 TableViewController로드 :
NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease]; self.nearbyTableController = tableController;
[self pushViewController:self.nearbyTableController animated:YES]; [tableController release];
AutorELEASE로 설정된 객체를 출시하는 것은 메모리 관리에서 가장 일반적인 오류 여야합니다. 해당 라인 삭제 [TableconTroller Release]는 문제를 해결했습니다.
다른 팁
지정하면 운이 좋다 @selector(refreshAction)
버튼을 만들 때, 즉 :
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)];
이니셜 라이저에 동작을 지정하지 않으면 대상이 저장되지 않을 수 있습니다.
코드가 작동하지 않는 이유를 정확히 100% 확신하지는 않지만 생성자에 직접 선택기를 설정하는 것이 작동합니다.
UIBarButtonItem *rButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refreshAction)];
제휴하지 않습니다 StackOverflow