2010-10-02 6 views
2

творю рамки и у меня есть этот код (conditions является NSDictionary):stringWithFormat: с неизвестным типом данных

for (NSString *key in conditions) { 
    id value = [[conditions valueForKey:key] retain]; 


    // Check if number or string 
    if ([value class] == [NSString class]) { 
     conditionsString = [NSString stringWithFormat:@"%@='%@' ", key, value]; 
    } else { 
     conditionsString = [NSString stringWithFormat:@"%@=%@ ", key, value]; 
    } 
    } 

Если value является NSString, котировки должны быть добавлены, иначе коды не должны быть добавлены , Однако, если не NSString, я не знаю тип данных value, так как это может быть NSNumber, NSInteger, int, float, double и т. Д. Я не могу просто использовать %@ или %d, но я уверен, что кто-то на SO знает, как это сделать? Благодарю.

+0

вы не можете добавить 'NSInteger',' 'int', float' или' double' к NSDictionary, потому что все они являются C Структуры. У вас могут быть только объекты типа 'NSObject', как сказал @nesium. –

+0

Ага, поэтому все числа должны быть NSNumber? – 2010-10-03 12:28:55

ответ

4

посмотреть на this.

Редактировать: в вашем случае это довольно легко, так как nsdictionary может содержать только nsobjects. поэтому% @ выполнит трюк.

0

Вы можете проверить класс (kindOfClass), а затем использовать соответствующий форматтер.

например.

if ([myObj isKindOfClass:[NSString class]])