1

尝试将其内容分配给新变量/对象时,使用 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*'”和“从 'objc_object*' 到 'int' 的无效转换”。

我已经阅读了 NSDictionary 上的 Apple 文档,它让我走到了这一步,但我不确定从这里去哪里。

提前致谢。

4

3 回答 3

2

简而言之,NSDictionary值必须是NSObjects。

您应该存储intNSNumber使用,例如:

[NSNumber numberWithInt:numChars]

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

int numChars = [[preProcessResult objectForKey:@"NumberChars"] intValue];
于 2011-10-14T18:49:37.990 回答
0

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

于 2011-10-14T18:53:22.383 回答
0

IplImage 是严格的,numchars 是整数。由于两者都不是客观的 c 对象,因此您不能将它们这样存储在字典中。您需要创建一个代表它们的对象。对于 numchars,您应该存储一个 NSNumber 对象。要取回值,您可以在从 objectForKey 取回的 NSNumber 上调用 intValue。

对于 IplImage,它有点复杂。你可以将它包装在一个自己的类中,或者你可以扩展 NSValue。

主要的是字典只能存储目标c对象。

于 2011-10-14T18:58:21.773 回答