Хранение / Извлечение объектов в / из NSDictionary - PullRequest
1 голос
/ 14 октября 2011

Я получаю ошибки, используя 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».

Я читал документы Apple по NSDictionary, которые дали мне это далеко, но я не уверен, куда идти дальше.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Короче говоря, NSDictionary значения должны быть NSObject с.

Вы должны хранить int как NSNumber, используя, например ,::1007*

[NSNumber numberWithInt:numChars]

При получении значения вы можете использовать, например ::

int numChars = [[preProcessResult objectForKey:@"NumberChars"] intValue];
0 голосов
/ 14 октября 2011

IplImage является строгим, а numchars - int.поскольку ни один из них не является объективным объектом c, вы не можете хранить их как таковые в словаре.Вам нужно создать объект, который представляет их.В случае с numchars вы должны хранить объект NSNumber.Чтобы вернуть значение, вы должны вызвать intValue для NSNumber, который вы возвращаете из objectForKey.

Для IplImage это немного сложнее.Вы можете обернуть его в отдельный класс или расширить NSValue.

Главное, что в словаре могут храниться только объективные объекты c.

0 голосов
/ 14 октября 2011

Также вы не можете добавить целое число в словарь - это должен быть объект.Так что оберните ваше целое число в NSNumber, и вы должны быть в порядке.

...