簡體   English   中英

解雇ABUnknownPersonViewController的問題。 在解雇時顯示正常但應用程序崩潰

[英]Problem dismissing an ABUnknownPersonViewController. Shows up fine but app crashes when dismissing

我的應用程序包含2個視圖。 MainView和ResultsView。 MainView包含需要填充的UITextField,然后如果觸摸了某個按鈕,則視圖將更改為ResultsView。 下面是處理它的代碼的多汁部分。

// 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。 我想要做的是,當選擇該表ABUnknownPersonViewController的一行時,我想調用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發送的所有正確信息,並在按下“添加到聯系人”按鈕時在地址簿中正確保存聯系人。 但是,當在最后一步按下完成(或取消)按鈕時,它崩潰了很糟糕!

問題是,我無法從調試器中理解任何東西,因為在啟動時,它會說“加載43453堆棧幀......”,我停止了哪個程序。 堆棧跟蹤的頂部是:

[CALayer sublayers];

然后有很多

[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]

請賜教。 我確信這可能是一個有點愚蠢的事情,我做錯了。 我一直在努力解決這個問題,但我做不到。 :(

修復它.....它確實是愚蠢的。

它應該是:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM