0

又是我,在过去的一个半小时里我一直在为此苦苦挣扎,似乎找不到实现这一点的好方法。我基本上是想在单击按钮时在标签上显示结果。(刚从 xcode 开始,所以我不确定这是否是该操作的正确术语)。无论如何,这是我的代码和控制器上的方法:我有

@interface Match : NSObject{
}
@property NSInteger *Id;
@property NSString *fighter1, *fighter2;
- (id) initWithWCFId:(NSInteger)matchId bracketId:(NSInteger)bracketId;
@end


@implementation Match
- (id) initWithWCFId:(NSInteger)matchId bracketId:(NSInteger)bracketId{
    self = [self init];
    if(self){
        self.Id = &(matchId);
        self.fighter1 = @"Person 1";
        self.fighter2 = @"Person 2";
    }
    return self;
}
@end

- - 控制器 - -

@interface ViewController : UIViewController{
    /*IBOutlet UITextField *txtFieldBracketId;
    IBOutlet UITextField *txtFieldMatchId;*/
}
@property (weak, nonatomic) IBOutlet UITextField *txtFieldBracketId;
@property (weak, nonatomic) IBOutlet UITextField *txtFieldMatchId;
- (IBAction)btnSubmit:(id)sender;

@end

- - 执行

- (IBAction)btnSubmit:(id)sender {

    @autoreleasepool {
        Match *match = [[Match alloc]initWithWCFId:[_txtFieldMatchId.text integerValue] bracketId:[_txtFieldBracketId.text integerValue]];

        self.lblMatchId.text = [[NSString alloc] initWithString:[NSNumber numberWithInt:match.Id]];
        self.lblFighter1.text = [[NSString alloc] initWithString:match.fighter1];
        self.lblFighter2.text = [[NSString alloc] initWithString:match.fighter2];
    }
}

我基本上有两个文本框。现在,当我单击按钮时,它将获取这些文本框的值,然后显示它根据这些输入获得的数据。然后它将显示以下三个数据:

Id,Fighter1 和 Fighter2。

所以发生的事情是,当我单击按钮时,整个事情都会停止并给我这个错误:

NSInvalidArgumentException”的,原因是: ' - [__ NSCFNumber长度]:无法识别的选择发送到实例0x74656e0' *第一掷调用堆栈:(0x1c90012 0x10cde7e 0x1d1b4bd 0x1c7fbbc 0x1c7f94e 0xae4841 0x2891 0x10e1705 0x18920 0x188b8 0xd9671 0xd9bcf 0xd8d38 0x4833f 0x48552 0x263aa 0x17cf8 0x1bebdf9 0x1bebad0 0x1c05bf5 0x1c05962 0x1c36bb6 0x1c35f44 0x1c35e1b 0x1bea7e3 0x1bea668 0x1565c 0x23dd 0x2305) libc++abi.dylib:终止调用抛出异常

现在我不确定 1. 我设计班级的方式是否正确,使用“NSInteger”作为属性 ID。或 2. 将 Id 整数分配给字符串(编辑框)是错误的。

4

2 回答 2

2

两件事情:

  1. 该属性不应该是指针类型,所以它应该是@property NSInteger Id;并且init应该只是self.Id = matchId;
  2. 通过使用使其成为字符串[NSString stringWithFormat:@"%d", match.Id]
于 2012-11-14T00:24:00.100 回答
1

除了您的Id财产问题外,崩溃还来自以下原因:

self.lblMatchId.text = [[NSString alloc] initWithString:[NSNumber numberWithInt:match.Id]];

您正在尝试将NSNumber对象作为参数传递给该initWithString:方法。但是这个方法需要一个NSString值,而不是一个NSNumber.

将三行更新为:

self.lblMatchId.text = [[NSString alloc] initWithFormat:#"%d", match.Id];
self.lblFighter1.text = match.fighter1;
self.lblFighter2.text = match.fighter2;

我假设match.fighter1并且match.fighter2是 NSString 属性。

于 2012-11-14T00:43:17.853 回答