создание объекта из нескольких типов переменных

У меня есть NSDictionary, который я передаю классу NSObject, где я извлекаю все значения из словаря и передаю их в их правильные типы.

Например, NSInteger, BOOL, NSString, char — это типы значений, которые я извлекаю из NSDictionary и помещаю в их единственные переменные.

Мой вопрос, как лучше всего превратить эти значения в один большой объект, который затем можно поместить в массив?

Я слышал, что могу использовать сам класс как объект. Но я не совсем уверен, как это сделать.

или я мог бы просто поместить их обратно в NSDictionary?... но если это так, допускают ли NSDictionaries несколько типов значений?


person HurkNburkS    schedule 10.08.2012    source источник
comment
Если вы знаете, что количество и тип элементов останутся прежними, сделайте ваши ключи статическими NSStrings для легкого доступа.   -  person CodaFi    schedule 10.08.2012
comment
Я бы сделал это, но мне нужно поместить их в правильные типы значений, поскольку мне нужно выполнить сортировку со значениями NSStrings и NSInteger.   -  person HurkNburkS    schedule 10.08.2012


Ответы (3)


На самом деле, вы на правильном пути. в основном это архитектура MVC. поэтому вы спрашиваете о M = Model.

Модель в этом примере — это класс, который определяет все переменные. перейдем к делу, вот что вы должны сделать:

-> создайте класс, содержащий вашу переменную, с именем @property и @synthesize: ClassA.

тогда вы можете установить объект ClassA в словарь.

ClassA *myClass = [[ClassA alloc] init];
myClass.myString = @"test String";
myClass.myBoolean = True;

[dictionary setObject:myClass forKey:@"myObject"];
[myClass release]; //we no longer need the object because already retain in dictionary.

затем извлеките его:

ClassA *myClass = (ClassA*)[dictionary objectForKey:@"myObject"];
NSLog(@"this is value of myString : %@ & boolean : %i",myClass.myString,myClass.myBoolean);
person HelmiB    schedule 10.08.2012
comment
ааа!! это то, о чем я читал, я просто не смог правильно усвоить это в своей голове! Спасибо большое за помощь!! :) Так что ничего страшного, если вы поместите разные типы переменных в разные записи NSDictionary? - person HurkNburkS; 10.08.2012
comment
Вы можете указать разные типы, но они должны быть объектами, так что никаких bool или char - person rdelmar; 10.08.2012
comment
Это действительно работает? Вы хотели поместить ClassA в словарь, а не myClass? - person rdelmar; 10.08.2012
comment
на самом деле я использую const char *, ведь я думаю, что это может работать в NSDictionary, и я думаю, что могу изменить BOOL на одну из этих штук int bool ... Мне нужно прочитать это. - person HurkNburkS; 10.08.2012
comment
Я не знаю, что вы подразумеваете под int bool thingies. Что вы можете сделать, так это использовать NSNumber numberWithBool: чтобы обернуть BOOL в объект - person rdelmar; 10.08.2012
comment
@rdelmar извините, не ClassA, нужно поставить myClass, я отредактировал свой ответ. - person HelmiB; 10.08.2012
comment
@HurkNburkS да, вы можете использовать как NSNumber, но я не знаю насчет const char*, пока вы можете создавать @property и @synthesize, все готово. просто чтобы добавить, вы можете захотеть release возразить в dealloc. - person HelmiB; 10.08.2012

Вы можете поместить коллекцию значений в NSDictionary, NSArray, NSMutableArray и т. д. Любой из типов коллекции. Или, если у вас есть фиксированное количество значений/типов, вы можете создать класс, в котором есть элемент данных для каждого значения/типа, и поместить его в него. Решение с классом устранило бы необходимость выполнять много кастингов, но оно также работает только в том случае, если имеется фиксированное количество значений/типов.

Вот AppleDoc в коллекциях.

person Kent    schedule 10.08.2012

Да, вы можете создать сам класс с этими разными значениями в виде свойств. Как только вы передадите этот объект любому классу, вы сможете получить доступ к этим значениям с помощью obj .propertyName. Выполнение этого запроса для создания модального окна в шаблоне MVC. Пожалуйста, дайте мне знать, если есть сомнения.

 Test *object = [[Test alloc] init];
object.testBool=true;
object.testString=@"Test";
NSDictionary *passData = [[NSDictionary alloc] initWithObjectsAndKeys:object,@"testObject", nil];
Test *getObject = (Test*)[passData objectForKey:@"testObject"];
NSLog(@"%d",getObject.testBool);
NSLog(@"%@",getObject.testString);

Вы можете настроить метод init класса Test.

person Sanoj    schedule 10.08.2012