导航回父场景时解除segue问题

时间:2013-12-06 08:02:08

标签: ios objective-c memory-management segue

我正试图从一个场景中解开segue。它工作正常但我需要获取父屏幕的值。 (我使用push segue从父级导航到子级场景)

我正在调用像这样的unwind segue

- (IBAction)done:(UIStoryboardSegue *)segue {
    NSLog(@"gonna navigate");
    RESTToppingTableViewController *vc = [segue destinationViewController];
    [self setSelectedToppings:[vc toppingList]];
    NSLog(@"%@", [vc toppingList]);
}

但问题是,即使在调用父视图之前,似乎toppingList数组也已从内存中删除。

以下是我得到的错误。

2013-12-06 13:26:42.192 Pizza to Go[2319:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RESTAddToCartViewController toppingList]: unrecognized selector sent to instance 0x9b681a0'
*** First throw call stack:
(
    0   CoreFoundation                      0x01f405e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01cc38b6 objc_exception_throw + 44
    2   CoreFoundation                      0x01fdd903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x01f3090b ___forwarding___ + 1019
    4   CoreFoundation                      0x01f304ee _CF_forwarding_prep_0 + 14
    5   Pizza to Go                         0x0004a3a2 -[RESTAddToCartViewController done:] + 130
    6   libobjc.A.dylib                     0x01cd581f -[NSObject performSelector:withObject:] + 70
    7   UIKit                               0x010d01f1 -[UIStoryboardUnwindSegueTemplate _perform:] + 536
    8   UIKit                               0x00f660f9 -[UIStoryboardSegueTemplate perform:] + 115
    9   libobjc.A.dylib                     0x01cd5874 -[NSObject performSelector:withObject:withObject:] + 77
    10  UIKit                               0x00a330c2 -[UIApplication sendAction:to:from:forEvent:] + 108
    11  UIKit                               0x00d07c9b -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 139
    12  libobjc.A.dylib                     0x01cd5874 -[NSObject performSelector:withObject:withObject:] + 77
    13  UIKit                               0x00a330c2 -[UIApplication sendAction:to:from:forEvent:] + 108
    14  UIKit                               0x00a3304e -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
    15  UIKit                               0x00b2b0c1 -[UIControl sendAction:to:forEvent:] + 66
    16  UIKit                               0x00b2b484 -[UIControl _sendActionsForEvents:withEvent:] + 577
    17  UIKit                               0x00b2a733 -[UIControl touchesEnded:withEvent:] + 641
    18  UIKit                               0x00a7051d -[UIWindow _sendTouchesForEvent:] + 852
    19  UIKit                               0x00a71184 -[UIWindow sendEvent:] + 1232
    20  UIKit                               0x00a44e86 -[UIApplication sendEvent:] + 242
    21  UIKit                               0x00a2f18f _UIApplicationHandleEventQueue + 11421
    22  CoreFoundation                      0x01ec983f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    23  CoreFoundation                      0x01ec91cb __CFRunLoopDoSources0 + 235
    24  CoreFoundation                      0x01ee629e __CFRunLoopRun + 910
    25  CoreFoundation                      0x01ee5ac3 CFRunLoopRunSpecific + 467
    26  CoreFoundation                      0x01ee58db CFRunLoopRunInMode + 123
    27  GraphicsServices                    0x03e159e2 GSEventRunModal + 192
    28  GraphicsServices                    0x03e15809 GSEventRun + 104
    29  UIKit                               0x00a31d3b UIApplicationMain + 1225
    30  Pizza to Go                         0x000574ad main + 141
    31  libdyld.dylib                       0x0285e725 start + 0
)
libc++abi.dylib: terminating with uncaught exception of type NSException

可能的解决办法是什么?感谢您提前的时间。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为您的destinationViewController不是RESTToppingTableViewController

日志:

-[RESTAddToCartViewController toppingList]: 
      unrecognized selector sent to instance 0x9b681a0

声明您正在尝试获取RESTAddToCartViewController的toppingList,但此控制器没有toppingList属性。

确保UIViewController返回的[segue destinationViewController]确实符合您的预期。