NSNumber распознается как NSString в if-else - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть этот кусок кода, который сводит меня с ума.Это cellForRowAtIndexPath, отображающий 4 свойства, из которых 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 NSNumbers.Когда я нажимаю на строковые поля, я получаю строку, и она отлично работает.Но если я щелкну одно из числовых полей, я получу его строку и NSCFNumber isNaturallyRTL ... нераспознанный селектор, отправленный экземпляру по адресу:

textField.text = [editedObject valueForKey:editedFieldKey];

Почему мой тест не пройден?Почему даже когда я выбираю число, которое не является строкой, приложение выполняет первое условие if, как если бы оно было строкой?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Если бы мне пришлось угадывать, я бы сказал, что вы проверяете тип неправильной переменной.Вместо:

...
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
...

Только на основе ваших имен переменных (поскольку ваш вопрос немного не хватает деталей), кажется, что вместо этого вы хотите:

...
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSSTRING class]]) {
...

Я ушелВаши опечатки во фрагментах - это не может быть компилировано, хотя.Вы на самом деле не используете [NSString class] вместо [NSSTRING class]?Обратите внимание на разницу в капитализации.

0 голосов
/ 08 декабря 2011

Hm. Это всего лишь предположение ... Но сначала:

NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No");

Здесь вы смотрите на editedFieldKey.

if ([editedFieldName isKindOfClass:[NSSTRING class]]) {

Здесь вы смотрите editedFieldName. В любом случае, я выгляжу так, как будто вы проверяли фактическое значение.

...