0

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

我会试着解释...

在我自己的 TableView 中,我选择了一条带上 Urban Airship 的 StoreFront 的行。据我所知,它以模态窗口的形式出现。这是一个直接指向我在 TableView 中选择的项目的 DetailView 的 TableView。我购买了该项目并开始下载。我有一个来自 Urban Airship 的代表,它在我的 TableView 中告诉我该项目何时安全地挂在电话上。我 [selfdismissModalViewControllerAnimated: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 调用。

4

2 回答 2

0

答案在系统抛出的异常中

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

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

于 2011-12-08T09:05:52.660 回答
0

查看您关闭模态视图控制器的代码块会很有帮助:

[self dismissModalViewControllerAnimated:YES];

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

[[self presentingViewController] dismissModalViewControllerAnimated:YES];
于 2011-12-10T07:47:11.660 回答