存储/提取对象到/从NSDictionary



在尝试将其内容分配给新变量/对象时,我使用NSDictionary获得错误。也许这是不可能的?我以为会的。我也不确定是否可以在字典中使用非objective C特定对象。你能吗?

NSDictionary *preProcessResult = [[NSDictionary alloc] initWithDictionary: [self preProcessing:testImage]];
IplImage* resultImage = [preProcessResult objectForKey:@"ResultImage"];
int numChars = [preProcessResult objectForKey:@"NumberChars"];
[preProcessResult release];

下面是我调用来创建字典的方法:

- (NSDictionary*) preProcessing: (IplImage*) testImage {
//do stuff to image
NSDictionary *testImage_andNumChars = [NSDictionary dictionaryWithObjectsAndKeys:resultImage, 
@"ResultImage", numChars, @"NumberChars", nil];
return testImage_andNumChars;
}

这不是正确的处理方式吗?当我创建字典时得到的错误是:

"在传递参数时无法将'IplImage*'转换为'objc_object*' "

当我检索字典元素时,我得到:

"初始化时无法将'objc_object*'转换为'IplImage*' "one_answers"从'objc_object*'转换为'int'无效".

我已经阅读了NSDictionary上的苹果文档,它让我走了这么远,但我不确定从哪里开始。

简而言之,NSDictionary的值必须是NSObject的值。

您应该将int存储为NSNumber,例如:

[NSNumber numberWithInt:numChars]

当检索值时,您可以使用例如:

int numChars = [[preProcessResult objectForKey:@"NumberChars"] intValue];

IplImage是一个strict类型,numchars是一个int类型。因为它们都不是objective - c对象,所以不能将它们存储在字典中。您需要创建一个对象来表示它们。对于numchars,你应该存储一个NSNumber对象。要取回值,你会在你从objectForKey取回的NSNumber上调用intValue。

对于IplImage来说,这有点复杂。你可以把它包装在自己的类中,或者你可以扩展NSValue。

最主要的是字典只能存储objective c对象。

也不能将整数添加到字典中-它必须是一个对象。所以把你的整数用NSNumber括起来就可以了

相关内容

  • 没有找到相关文章