Iphone [NSCFString stringValue]:发送到实例的选择器无法识别
我使用这段代码查询核心数据并返回key的值,我存储的值如下:Iphone [NSCFString stringValue]:发送到实例的选择器无法识别,iphone,objective-c,Iphone,Objective C,我使用这段代码查询核心数据并返回key的值,我存储的值如下: NSString *newName= @"test"; [newShot setValue:newName forKey:@"shotNumber"]; 我这样问: NSManagedObject *mo = [items objectAtIndex:0]; // assuming that array is not empty NSString *value = [[mo valueForKey:@"shotNumb
NSString *newName= @"test";
[newShot setValue:newName forKey:@"shotNumber"];
我这样问:
NSManagedObject *mo = [items objectAtIndex:0]; // assuming that array is not empty
NSString *value = [[mo valueForKey:@"shotNumber"] stringValue];
NSLog(@"Value : %@",value);
不过,我对这条消息感到非常失望:
[NSCFString stringValue]:发送到实例的选择器无法识别
有人知道从哪里来吗?键
@“shotNumber”
的值可能是NSString
类型,它只是NSCFString
的包装。您需要做的是,不要使用stringValue
,而是使用description
方法。[mo valueForKey:@“shotNumber”]
返回字符串,而NSString
(其中NSCFString
是实现细节)不实现stringValue
方法
考虑到NSNumber
确实实现了stringValue
,我敢打赌,当您以为要输入NSNumber
newName
(@“test”
)已经是一个NSString时,您会将NSString
放入mo
。无需调用-stringValue
将其转换为字符串
NSString *value = [mo valueForKey:@"shotNumber"];
请注意,如果您试图访问一个对象上的字符串属性,而该对象被认为是其他对象,但实际上是一个字符串,那么您也可能会遇到此问题
NSString *value = [mo valueForKey:@"shotNumber"];
在我的例子中,我认为我的水合对象实际上是水合,但通过
isKindOfClass
检查它的类时,我发现它是一个NSString,并意识到我错误地将它作为水合对象进行了转换,我的问题更进一步。我经常为NSString添加一个类别来处理这个问题:
@interface NSString(JB)
-(NSString *) stringValue;
@end
@implementation NSString(JB)
-(NSString *) stringValue {
return self;
}
@end
您可以将类似的类别添加到您希望以这种方式响应的其他类。这是错误的。切勿在生产代码中使用
说明
description
纯粹用于描述对象以进行调试。如果您有一个NSString,则不需要调用任何方法从中获取NSString。正确,但如果他的编码方法不一致,则应使用某种方法确保它成为NSString,可能是[NSString stringWithFormat:@“%@”,[mo valueForKey:@“shotNumber”]
?