Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone [NSCFString stringValue]:发送到实例的选择器无法识别_Iphone_Objective C - Fatal编程技术网

Iphone [NSCFString stringValue]:发送到实例的选择器无法识别

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

我使用这段代码查询核心数据并返回key的值,我存储的值如下:

 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”]