1
내 앱은 2 개의보기로 구성됩니다. MainView 및 ResultsView. MainView는 채워질 필요가있는 UITextField를 포함하며, 버튼을 터치하면 뷰가 ResultsView로 변경됩니다. 아래는이를 처리하는 코드의 맛있는 부분입니다. ABUnknownPersonViewController를 닫는 중 문제가 발생했습니다. 해고 할 때 잘 보이지만 앱이 깨집니다.
// In CallerIDAppDelegate.h
@class MainViewController;
@class ResultsViewController;
@interface CallerIDAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
IBOutlet MainViewController *mainViewController;
IBOutlet ResultsViewController *resultsViewController;
NSString *phoneNumber;
NSMutableArray *parsingResults;
BOOL isSearchingForSaved;
}
[...]
// In CallerIDAppDelegate.m
[...]
- (void)applicationDidFinishLaunching:(UIApplication *)application {
/* Set up and display MainView */
MainViewController *mainController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:[NSBundle mainBundle]];
self.mainViewController = mainController;
[window addSubview:mainController.view];
// Override point for customization after application launch
[window makeKeyAndVisible];
}
-(void)switchViews{
if(self.resultsViewController == nil){
ResultsViewController *resultsController = [[ResultsViewController alloc] initWithNibName:@"ResultsViewController" bundle:nil];
self.resultsViewController = resultsController;
[resultsController release];
}
if(self.mainViewController.view.superview == nil){
[resultsViewController.view removeFromSuperview];
[window insertSubview:mainViewController.view atIndex:0];
} else {
[mainViewController.view removeFromSuperview];
[window insertSubview:resultsViewController.view atIndex:0];
}
}
지금
ResultsView
에서 나는 일부 콘텐츠와의 tableview 있습니다. 내가하고 싶은 일은 tableview의 행을 선택했을 때 사용자가 연락처를 주소록에 저장할 수 있도록
ABUnknownPersonViewController
을 호출하려고합니다.
ResultsViewController.m
에 따라서
: 행이 선택 될 때
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[...]
ABUnknownPersonViewController *unknownPersonView = [[[ABUnknownPersonViewController alloc] init] autorelease];
[unknownPersonView setUnknownPersonViewDelegate:self];
[unknownPersonView setDisplayedPerson:personRecord];
[unknownPersonView setAllowsAddingToAddressBook:YES];
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:unknownPersonView] autorelease];
[self presentModalViewController:navigationController animated:YES];
}
- (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView didResolveToPerson:(ABRecordRef)person {
CallerIDAppDelegate *delegate = (CallerIDAppDelegate *)[[UIApplication sharedApplication] delegate];
DLog("Called!");
[self dismissModalViewControllerAnimated:YES]; //caused crash
// Caused crash too
//[delegate.resultsViewController dismissModalViewControllerAnimate:YES];
}
ABUnknownPersonViewController
personRecord
을 통해 전송 된 모든 올바른 정보가 포함되어 있으며 "연락처에 추가"버튼을 누르면 주소록에 연락처가 제대로 저장됩니다. 하지만 마지막 단계에서 완료 (또는 취소) 버튼을 누르면 꽤 좋지 않은 충돌이 발생합니다!
문제는 디버거에서 아무 것도 이해할 수 없다는 것입니다. 실행이 끝나면 "Loading 43453 stack frames ..."이라는 프로 시저를 멈추었습니다.
[CALayer sublayers];
하고 가르치 려주십시오 LOT에게
[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]
의을 이 있습니다 : 스택 추적의 상단입니다. 나는 아마도 내가 잘못하고있는 바보 같은 짓을했을 것이라고 확신한다. 나는 그 문제를 해결하기 위해 몇 시간 동안 노력했지만, 할 수는 없다. . :(
용액을 사용하면 사람이에서 당신 자신을 발견 가장 내용 스택 오버플로에 오신 것을 환영합니다 :) – h4xxr