释放ViewController

时间:2011-12-08 08:31:04

标签: ios uiviewcontroller modalviewcontroller urbanairship.com

我的应用程序使用ARC,而我遇到了一些不使用它的第三方软件。 我可以通过在构建阶段设置-fno-objc-arc来解决这个问题。但是我遇到了一个问题,即一个ViewController崩溃了pp,因为它被调用了两次。

我会尝试解释......

在我自己的TableView中,我选择了一条引入Urban Airship的StoreFront的线路。 据我所见,它作为Modal窗口出现。 这是一个TableView直接指向我在TableView中选择的项目的DetailView。我买这个项目,它开始下载。 我有一个来自Urban Airship的代表,在我的TableView中告诉我什么时候这个项目安全地在电话上。我[自我解雇ModalViewControllerAnimated:YES];在我自己的TableView中该代表末尾的UAStore并返回我的TableView 一切正常。

选择要购买的新产品时会出现问题。 我会去UA DetailView,但是一旦我点击“购买”按钮,应用就会崩溃。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported (<UAProductDetailViewController: 0x3a35e0>)'

对我而言,看起来UAProductDetailViewController尚未发布。 Urban Airship的实施文件位于库中,因此无法进行调整。 我已经尝试了许多不同的东西离开这里。

    [[DataModel sharedModel] saveContext]; 
    [[self tableView] reloadData]; 

  //  LessonListViewController *lessonListVC = [[LessonListViewController alloc] initWithNibName:@"LessonListView" bundle:nil];
    UserData *UserData_Array = [dm.UserData_Array objectAtIndex:0];
 //   lessonListVC.courseID = UserData_Array.current_levelName;
 //   lessonListVC.lessonsArray = UserData_Array.current_level;
    NSLog(@"Current level name:%@",UserData_Array.current_levelName);
    NSLog(@"Lessons array:%@",UserData_Array.current_level);

  //  lessonListVC.navigationItem.hidesBackButton = YES;

   // [self.navigationController popToViewController:lessonListVC animated:YES];
   // [UAProductDetailViewController removeFromParentViewController];
    self.tabBarController.tabBar.hidden = NO;
    [self dismissModalViewControllerAnimated:YES];

但到目前为止还没有任何工作。 希望有人可以按照我的有点混淆的描述并保存头发。

* * 当我回到自己的TableView时,UADetailViews的viewDidUnload中的NSLog调用不会被调用。

2 个答案:

答案 0 :(得分:0)

答案在于系统抛出的异常

reason: 'Pushing the same view controller instance more than once is not supported'

您正尝试多次推送UAProductDetailViewController的相同实例。您应该创建一个 new 实例并推送它。

答案 1 :(得分:0)

使用以下命令查看用于解除模态视图控制器的代码块会很有帮助:

[self dismissModalViewControllerAnimated:YES];

这对我来说不太合适,因为如果你在委托方法实现中调用它,“self”会引用你的对象。如果您通过委托方法接收对其视图控制器的引用,请尝试使用它来关闭它。如果您尝试从自己的视图控制器中解除它,并且您正在运行iOS 5.0,则需要使用presentViewController而不是parentViewController进行引用,例如:

[[self presentingViewController] dismissModalViewControllerAnimated:YES];