我有这些代码让我发疯了。它是一个显示4个属性的cellForRowAtIndexPath,其中2个是NSStrings,2个是NSNumber:
//THIS LOGS THE OBJECT BEFORE PROCESSING
NSLog(@"NO DATE EDITING");
NSLog(@"eFK: %@, eFN: %@",editedFieldKey, editedFieldName);
NSLog(@"editedObject vWA is:%@", editedObject);
NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No");
//THIS TESTS TO SEE IF ITS A NSSTRING
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
NSLog(@"its nsstring");
textField.text = [editedObject valueForKey:editedFieldKey];
NSLog(@"its NOT nsstring");
}
} else {
//ELSE ITS A NUMBER SO GET ITS STRING VALUE BEFORE ASSIGNING
textField.text = [[editedObject valueForKey:editedFieldKey] stringValue];
// And we set the switch to ON if YES, OFF if NO...
if ([editedObject valueForKey:editedFieldKey]) {
NSLog(@"itemreceived equal to 1");
itemReceived.on = YES;
} else {
NSLog(@"itemreceived equal to 0");
itemReceived.on = NO;
}
[textField becomeFirstResponder];
我有4个字段,2个NSStrings和2个NSNumber。当我点击字符串字段时,我得到一个字符串,它工作正常。但是,如果我点击其中一个数字字段,我得到一个字符串和NSCFNumber isNaturallyRTL ...无法识别的选择器发送到实例:
textField.text = [editedObject valueForKey:editedFieldKey];
为什么我的测试失败了?为什么即使我选择一个不是字符串的数字,应用程序也会通过第一个if条件,就像它是一个字符串一样?
答案 0 :(得分:3)
如果我不得不猜测,我会说你正在测试错误变量的类型。而不是:
...
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
...
根据您的变量名称(因为您的问题有点缺乏细节),您似乎想要:
...
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSSTRING class]]) {
...
我把你的拼写错误留在了片段中 - 但这不能编译。您实际上不是在使用[NSString class]
而不是[NSSTRING class]
吗?请注意大写差异。
答案 1 :(得分:0)
嗯。这只是猜测...但首先:
NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No");
在这里,您看一下editedFieldKey
。
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
您在这里看editedFieldName
。在这两种情况下,我看起来好像你正在测试实际值。