在尝试将其内容分配给新变量/对象时,我使用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文档,这篇文章让我走得很远,但我不知道从哪里开始。
提前致谢。
答案 0 :(得分:2)
简而言之,NSDictionary
值必须为NSObject
s。
您应使用例如int
将NSNumber
存储为[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对象。