2009-09-06 1 views
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:] 

의을 이 있습니다 : 스택 추적의 상단입니다. 나는 아마도 내가 잘못하고있는 바보 같은 짓을했을 것이라고 확신한다. 나는 그 문제를 해결하기 위해 몇 시간 동안 노력했지만, 할 수는 없다. . :(

답변

4

수정이 ..... 그것 참 바보

이 있어야한다 :

- (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView didResolveToPerson:(ABRecordRef)person { 
CallerIDAppDelegate *delegate = (CallerIDAppDelegate *)[[UIApplication sharedApplication] delegate]; 
DLog("Called!"); 
[unknownPersonView dismissModalViewControllerAnimated:YES]; 

}

+0

용액을 사용하면 사람이에서 당신 자신을 발견 가장 내용 스택 오버플로에 오신 것을 환영합니다 :) – h4xxr

관련 문제