存储/从NSDictionary中提取对象

时间:2011-10-14 18:47:20

标签: iphone objective-c opencv nsdictionary iplimage

在尝试将其内容分配给新变量/对象时,我使用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 *' to' objc_object *'在论证传递"

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

"无法转换' objc_object *'到了IplImage *'在初始化"和"来自' objc_object *'的无效转化到' int' "

我已经阅读了关于NSDictionary的Apple文档,这篇文章让我走得很远,但我不知道从哪里开始。

提前致谢。

3 个答案:

答案 0 :(得分:2)

简而言之,NSDictionary值必须为NSObject s。

您应使用例如intNSNumber存储为[NSNumber numberWithInt:numChars]

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

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

{{1}}

答案 1 :(得分:0)

此外,您无法向字典添加整数 - 它必须是一个对象。所以将整数包装在NSNumber中你应该没问题。

答案 2 :(得分:0)

IplImage是严格的,而numchars是一个int。因为两者都不是一个客观的c对象,所以你不能将它们存储在字典中。您需要创建一个表示它们的对象。对于numchars,您应该存储NSNumber对象。要获得值,您将在从objectForKey返回的NSNumber上调用intValue。

对于IplImage来说,它有点复杂。您可以将其包装在自己的类中,也可以扩展NSValue。

主要的是字典只能存储客观的c对象。