在iOS UIAlertView崩溃时设置NSString文本,得到错误__NSCFNumber _isNaturallyRTL

时间:2015-02-01 23:17:38

标签: ios objective-c nsstring nsmutablearray uialertview

我使用NSMutableArray的NSString输出作为UIAlertView的文本,显示为默认文本。

我发现我必须从字典中的NSString重新创建NSString,否则会产生' NSInvalidArgumentException'。

具体来说,当我打电话时:

NSMutableArray *serverResponseNumbers;
...
UIAlertView *alertviewmod=[[UIAlertView alloc] initWithTitle:@"Modify" message:nil delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm",nil];
[alertviewmod setDelegate:self];
alertviewmod.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;  //two text fields
[alertviewmod textFieldAtIndex:0].keyboardType=UIKeyboardTypeNumberPad;
NSString *nsRecordNumber=[serverResponseNumbers objectAtIndex:an_int_variable];
...
[alertviewmod textFieldAtIndex:0].text= nsRecordNumber;

我得到了这个例外:

-[__NSCFNumber _isNaturallyRTL]: unrecognized selector sent to instance 0xde4dbf0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber _isNaturallyRTL]: unrecognized selector sent to instance 0xde4dbf0'

只是为了证明'它(假设NSLog证明了它),以下工作:

NSLog(@"nsRecordNumber=%@",nsRecordNumber);

或以下行正常工作:

[alertviewmod textFieldAtIndex:0].text= @"static text";

我发现它修复了它,但相当不优雅,就是重新创建NSString。在我的情况下,这个字符串只是一个整数,所以我可以使用这个hack:

     int number=[nsRecordNumber integerValue];
     NSString *nsNumberRecreated=[NSString stringWithFormat:@"%d",number];
     [alertviewmod textFieldAtIndex:0].text= nsNumberRecreated;

但真的不应该这样做。我读了那个' _isNaturallyRTL'是一个无证的功能。有谁能解释一下?也许我做错了,或者是错误?我正在使用XCode 4.6,定位iOS 4.3,并使用iPad 5.1.1对iOS进行测试。

1 个答案:

答案 0 :(得分:0)

我最好的猜测是nsRecordNumber实际上是NSNumber而不是NSString。这可以解释为什么NSLog可以正常工作,但设置文本并不是。如果是这种情况,你可以这样做。

[alertviewmod textFieldAtIndex:0].text= [NSString stringWithFormat:@"%@", nsRecordNumber];

这基本上就是你在NSLog中所做的事情。

编辑:更好的选择是。

[alertviewmod textFieldAtIndex:0].text= [nsRecordNumber stringValue];

尝试这样做,它实际上是一个NSString或NSNumber。

if ([nsRecordNumber isKindOfClass:[NSNumber class]])
{
    NSLog(@"it is a number");
}
else if([nsRecordNumber isKindOfClass:[NSString class]])
{
    NSLog(@"it is a string");
}

希望这有助于解决问题。至于_isNaturallyRTL来自哪里,我不知道。