获取NSException错误

时间:2014-07-01 02:44:19

标签: objective-c ios7 nsexception

获取NSException错误。环顾四周,可能就是我如何调用该方法,但不能对其进行故障排除,我是一个初学者,所以非常感谢一个很好的解释。

这是我的AddListingViewController.h

#import <UIKit/UIKit.h>
#import "ListingTableViewController.h"
#import "ListingManager.h"

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

@end

这是我的AddListingViewController.m

#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

我得到的错误(我确定它说明显在这里,但我不知道如何解决它)

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'

2 个答案:

答案 0 :(得分:0)

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

想象一下,例如你编写一个接受字符串并将其转换为整数的函数(让我们忽略NSString已经提供的这个事实)。如果有人传入一个无法转换的字符串会发生什么,比如他们传递字符串“hello world”。您的函数可能会决定它无法执行任何操作,因此抛出InvalidArgmentException(这种情况在Cocoa世界中更为罕见,并且通常返回nil而不是抛出异常)。

在这种情况下,它是前者,并且错误继续说“ - [UITextInputTraits text]:无法识别的选择器发送到实例0xc193e90”。 “无法识别的选择器发送到实例”部分意味着只是确认我们认为NSInvalidArgumentException意味着什么,您试图将一个方法(也称为选择器)调用到存储在内存地址0xc193e90的某个对象。那个地址是什么样的对象,你叫什么方法?这是 - [UITextInputTraits文本]:部分,这意味着你有一个UITextInputTraits类型的对象,你试图在其上调用'text'方法。

下一步是查找崩溃发生的位置。要做到这一点,你需要设置一个全局异常断点(尽管你记录了“添加按钮被点击”之后发生了崩溃,它可能在下一行,虽然我们不确定。我不会打败死马在这个问题上,有人问before并由Apple解释。

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

po self.title

or 

po [self.title class]

如果它不是UITextfield或UITextView,那么您可能在XIB文件的故事板中错误地连接了某些内容,在这种情况下,您应该检查界面构建器中的连接检查器。

祝你好运

答案 1 :(得分:-1)

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