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

时间:2015-09-04 17:27:11

标签: ios

我正在开发一个Twitter查看应用程序,并且遇到了将数据从单元格传递到详细信息视图的问题。每次我点击单元格,我的程序都会以此错误终止。

2015-09-04 12:18:34.298 twitterView2[10580:872508] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TwitterPostInfo objectForKey:]: unrecognized selector sent to instance 0x7f9fb261f890'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010527fc65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000104f18bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001052870ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00000001051dd13c ___forwarding___ + 988
    4   CoreFoundation                      0x00000001051dccd8 

2 个答案:

答案 0 :(得分:2)

找到问题位置的最简单方法是在xCode中转到断点导航器(Command + 7)。单击底部的+并选择"添加异常断点"。现在当你运行你的程序时,它将在异常发生时停止,并显示堆栈跟踪而不是"未捕获的异常"

答案 1 :(得分:0)

如果没有看到你在哪里分配这个类的tweetDetail属性,很难确定,但看起来你要分配一个类型为TwitterPostInfo的对象,而不是NSDictionary。检查您设置此属性的位置,并确保它是正确的类型。

或者,如果您打算传递TwitterPostInfo对象,则必须更改tweetDetail的类型以匹配。当然,你必须更新你访问数据的方式(我假设它是一个自定义类。我无法通过谷歌找到任何东西)。

编辑:

在看到你的prepareForSegue方法后,我的猜测是你打算传递一个TwitterPostInfo对象,而不是NSDictionary。如果是这样,您将需要将tweetDetail的类型从NSDictionary更改为TwitterPostInfo。然后,您需要使用与[self.tweetDetail objectForKey:@"text"][self.tweetDetail objectForKey:@"created_at"]等效的内容,而不是使用self.tweetDetail.textself.tweetDetail.createdAt,具体取决于您的课程结构。

试试TwitterDetailVC.h:

#import <UIKit/UIKit.h>
#import "TwitterPostInfo.h"

@interface TwitterDetailVC : UIViewController

@property (strong, nonatomic) TwitterPostInfo *tweetDetail;

@end

这适用于TwitterDetailVC.m的viewDidLoad方法

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tweetTextLabel.text = self.tweetDetail.tweetText;
    self.tweetTimeLabel.text = self.tweetDetail.timeDate;
}