我使用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
进行测试。
答案 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来自哪里,我不知道。