无法识别的选择器发送到segue上的实例

时间:2014-07-22 17:19:35

标签: objective-c uitableview segue unrecognized-selector

我在此代码中执行了一个segue,并且已经验证了正确的标识符是' showContacts'

if ([segue.identifier isEqualToString:@"showContacts"]) {
    SwipeTableViewController *destViewController = segue.destinationViewController;
    destViewController.albumObj = album;
}

在这个块的最后一行,我收到此错误消息:

2014-07-22 10:00:18.333 LayoutTest[710:60b] -[UITableViewController setAlbumObj:]: unrecognized selector sent to instance 0x965d810
2014-07-22 10:00:18.336 LayoutTest[710:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewController setAlbumObj:]: unrecognized selector sent to instance 0x965d810'

这是我在头文件中声明albumObj的地方:

#import <UIKit/UIKit.h>
#import "SWTableViewCell.h"
#import "Album.h"

@interface SwipeTableViewController : UITableViewController <SWTableViewCellDelegate>
@property (nonatomic, strong) Album* albumObj;

@end

这是我在SwipeTableViewController.m文件中合成的地方:

@implementation SwipeTableViewController

@synthesize albumObj;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
    // Custom initialization
    }
    return self;
}

我以完全相同的方式使用同一个对象完成了segues并且它运行良好。为什么我会遇到这个问题?我想,也许我应该像这样在表app appate中声明albumObj:

@interface SwipeTableAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) Album* albumObj;

@end

但是它看起来不像我需要的那样可以在SwipeTableViewController.m中访问albumObj。

2 个答案:

答案 0 :(得分:4)

看起来segue.destinationViewController正在为您提供UITableViewController。这就是为什么说setAlbumObj无法识别。 UITableViewController上不存在该方法。确保您的目的地在故事板中为SwipeTableViewController

答案 1 :(得分:2)

这种情况发生的一个原因是你的故事板和你的代码之间存在差异:你的segue假定:@"showContacts" segue的目的地是SwipeTableViewController,而在故事板上则是destination设置为默认UITableViewController

打开故事板,选择segue的目标视图控制器,将其类型设置为UITableViewController,重新编译并运行。这应该解决这个问题。