首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取NSException误差

获取NSException误差
EN

Stack Overflow用户
提问于 2014-07-01 02:44:19
回答 2查看 274关注 0票数 0

得到一个NSException错误。环顾四周,这可能是我如何调用的方法,但不能排除它,我是一个初学者,所以一个好的解释是非常感谢的。

这是我的AddListingViewController.h

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import "ListingTableViewController.h"
#import "ListingManager.h"

@interface AddListingViewController : UIViewController
@property (nonatomic) ListingTableViewController *manager;
@property (nonatomic) ListingManager *add;

@end

这是我的AddListingViewController.m

代码语言:javascript
复制
#import "AddListingViewController.h"

@interface AddListingViewController ()
@property (weak, nonatomic) IBOutlet UITextField *title;
@property (weak, nonatomic) IBOutlet UITextView *desc;
@property (weak, nonatomic) IBOutlet UITextField *price;

@end

@implementation AddListingViewController


@synthesize manager = _manager;
@synthesize add = _add;

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.manager = [[ListingTableViewController alloc] init];
    self.add = [[ListingManager alloc] init];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

    //cancel posting on tap
- (IBAction)cancelListing:(UIBarButtonItem *)sender {
    NSLog(@"cancel tapped thpugh");
    [self dismissViewControllerAnimated:YES completion:nil];

}

    //add item on tap
- (IBAction)addListing:(UIBarButtonItem *)sender {
    NSLog(@"Add button tapped");

    self.add.listingTitle = self.title.text;
    self.add.listingDescription = self.desc.text;
    self.add.listingPrice = self.price.text;

    [self.manager.listings addObject:self.add];

    [self dismissViewControllerAnimated:YES completion:nil];

}

@end

我得到的错误(我肯定上面写的很清楚,但我不知道如何排除)

代码语言:javascript
复制
2014-06-30 21:37:44.825 Wildcat Exchange[1981:180450] Add button tapped
2014-06-30 21:37:44.827 Wildcat Exchange[1981:180450] -[UITextInputTraits text]: unrecognized selector sent to instance 0xc193e90
2014-06-30 21:37:44.831 Wildcat Exchange[1981:180450] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextInputTraits text]: unrecognized selector sent to instance 0xc193e90'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 06:26:50

首先是例外。例外情况是NSInvalidArgumentException,这通常意味着您试图调用试图调用它的对象上不存在的函数或方法,也可能是将错误的参数传递给函数的情况。

例如,假设您编写了一个接受字符串并将其转换为整数的函数(让我们忽略NSString已经提供了这个事实)。如果有人传入一个不能被转换的字符串,比如传递字符串"hello world“,会发生什么?您的函数可能会决定它不能做任何事情,因此抛出一个InvalidArgmentException (在Cocoa世界中这种情况更少见,并且经常返回零,而不是抛出异常)。

然而,在这种情况下,它是前者,错误继续说"-UITextInputTraits文本:发送到实例0xc193e90的未识别的选择器“。“发送到实例的未识别选择器”部分只是确认了我们认为NSInvalidArgumentException的意思,您试图调用存储在内存地址0xc193e90中的某个对象的方法(或者称为选择器)。那个地址是什么类型的对象,您调用了什么方法?这就是-UITextInputTraits文本: part,这意味着您有一个UITextInputTraits类型的对象,并且尝试在它上调用'text‘方法。

下一步是找出坠机的地点。要做到这一点,您需要设置一个全局异常断点(虽然您的崩溃发生在您记录下一行的"Add按钮点击“之后),但我们不确定。我不会在这个问题上大发雷霆,这是在此之前的问题,也是苹果解释的。

一旦有了异常断点集,Xcode将在导致抛出异常的行上停止应用程序。此时,您可以使用一些调试器命令或查看周围的代码来找出更多内容。例如,如果它在addListing函数的第三行中断,那么了解类的类型可能会很有用,因此在lldb控制台提示下,您可以尝试

代码语言:javascript
复制
po self.title

or 

po [self.title class]

如果它不是UITextfield或UITextView,那么您可能在XIB文件的情节提要中有不正确的连接,在这种情况下,您应该检查接口生成器中的connections检查器。

祝好运

票数 0
EN

Stack Overflow用户

发布于 2014-07-01 03:02:42

当选择器的名称为text:(带有冒号)时,您似乎在调用文本。试着在末尾添加冒号,看看是否有效。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24501783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档