[英]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.