iOS返回父视图控制器

时间:2016-03-07 10:13:25

标签: ios objective-c paypal

我正在使用payal iOS SDK,我希望使用以下函数返回到sendCompletedPaymentToServer函数中的父视图控制器:

[self.navigationController popViewControllerAnimated:YES]

和:

[self dismissViewControllerAnimated:YES completion:nil]

app崩溃了。 ParentViewcontroller可以是不同的。

当我第二次点击付费按钮时会发生这种情况。 错误日志:

2016-03-07 11:49:52.212 Ova [7169:2862312]不平衡调用开始/结束外观转换。 2016-03-07 11:50:02.525 Ova [7169:2862312] *由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [__ NSArray0 objectAtIndex:]:索引0超出范围空NSArray' ***第一次抛出调用堆栈: (0x184915900 0x183f83f80 0x184891478 0x100145268 0x10014494c 0x100144ba4 0x10011a200 0x100116a9c 0x10010aafc 0x100150200 0x1010cdbf0 0x1010cdbb0 0x1010d3658 0x1848ccbb0 0x1848caa18 0x1847f9680 0x185d08088 0x189670d90 0x10006ec28 0x18439a8b8) libc ++ abi.dylib:以NSException类型的未捕获异常终止

3 个答案:

答案 0 :(得分:0)

您正在使用:

[self.navigationController popViewControllerAnimated:YES];

这将带您回到查看控制器。如果要导航回以前的视图控制器,则应实现:

[self.navigationController popToRootViewControllerAnimated:YES];

答案 1 :(得分:0)

通过添加BOOL变量解决,以测试付款是否成功。并进入viewWillAppear我使用:

tuple_out = [('bread', '$1.90'),
             ('bread', '$1.95'),
             ('chips', '$2.54'),
             ('milk', '$2.31'),
             ('milk', '$2.38')]
dic = {}
for key, val in tuple_out:
    if key in dic:
        dic[key] += float(val.replace("$",""))
    else:
        dic[key] = float(val.replace("$",""))

感谢所有人。

答案 2 :(得分:0)

我们在集成PayU网关时也遇到了同样的问题。

我建议您使用协议代理方法来显示您在其Web视图中加载Payal的视图控制器。

让第二个视图控制器是你正在加载Payal的那个,第一个视图控制器正在显示第二个视图控制器。

1.在第二个视图中,控制器声明将解除secondviewcontroller的协议

@protocol DismissPayalDelegate <NSObject>
@required
     -(void)dismissPayal:(id)viewcontroller;
@end

 @interface secondviewcontroller : UIViewController
     @property(strong, nonatomic) id < DismissPayalDelegate > delegate;   
 @end


在secondviewcontroller.m文件中合成委托对象。

在第一个视图控制器中,如果你正在使用performSegeuWithIdentifier(提交第二个vc,即Payal),那么使用getview实例的destinationviewController即secondviewcontroller 。
设置destinationviewcontrollerInstance.delegate = self;

在secondViewController的成功/失败方法中编写代码以解除视图控制器

[delegate dismissPayal:self];<br><br>

它将解除在performSegueWithIdentifier方法中呈现的第二个视图控制器的实例

使用此逻辑,我希望它能为您提供很多帮助。