Как создать экземпляр любого типа (id) в Objective-c

У меня есть экземпляр NSArray, содержащий некоторые объекты определенного типа (NSDictionary).

Мне нужно скопировать этот массив в NSArray некоторого типа, известного во время выполнения.

Поэтому мне нужно создать экземпляры типа, известного во время выполнения, и скопировать содержимое NSDictionary в.

На самом деле я создал эти экземпляры типа NSObject, но при запросе после заголовка я получил ошибку unrecognized selector!

NSUInteger count = [value count];
NSMutableArray* arr = [[NSMutableArray alloc]initWithCapacity:count];

if (count > 0)
{
    for (int i=0; i < [value count]; i++)
    {
        id newObj = [[NSObject alloc] init];
        id currentValue = [value objectAtIndex:i];
        [self objectFromDictionary:currentValue object:newObj];
        [arr addObject:newObj];
    }
}

[arr release];

РЕДАКТИРОВАТЬ: objectFromDictionary забудьте об этом, он проверяет свойства newObj и устанавливает их значениями из словаря. хорошо делает свою работу.

EDIT 2:

Пожалуйста, посмотрите, почему я пытаюсь это сделать:

Тип объектов внутри непараметризованные массивы в формате JSON


person Muhammad Hewedy    schedule 26.09.2011    source источник
comment
Что именно должен делать ваш objectFromDictionary:object:, вы должны опубликовать код для этого, потому что выделение NSObject обычно бессмысленно.   -  person Joe    schedule 26.09.2011
comment
Разве не для этого предназначен NSCopying copyWithZone? Пока объект, который вы хотите скопировать, реализует copyWithZone, он должен работать. Если объект не реализует copyWithZone, вы облажались.   -  person Hot Licks    schedule 28.09.2011


Ответы (1)


Сдача:

id newObj = [[NSObject alloc] init];

to:

id newObj = [[NSMutableArray alloc] init];

or:

id newObj = [[NSClassFromString(@"NSMutableArray") alloc] init];

или, если вы хотите получить класс из существующего объекта:

id newObj = [[[existingObj class] alloc] init];
person Ole Begemann    schedule 26.09.2011
comment
Это не NSMutableArray, это какой-то неизвестный тип до времени выполнения - person Muhammad Hewedy; 26.09.2011
comment
Тогда используйте другой вариант, который я перечислил. - person Ole Begemann; 26.09.2011
comment
Какой вариант? NSClassFromString? У меня нет типа, пока я не найду способ проверить его во время выполнения - person Muhammad Hewedy; 26.09.2011
comment
Что вы подразумеваете под проверкой во время выполнения? Если у вас уже есть объект нужного класса, вы можете сделать [[[obj class] alloc] init]. - person Ole Begemann; 26.09.2011
comment
Вот в чем проблема... Я не знаю тип объектов, которые должны храниться в новом массиве! К счастью, перечитайте мой вопрос. - person Muhammad Hewedy; 26.09.2011
comment
Мухаммед, в настоящее время вопрос не возникает, поскольку, пожалуйста, укажите, как вы знаете тип во время выполнения и как вы пытаетесь его использовать, Оле Бегеманн уже предоставил достаточно примеров для реализации распределения классов во время выполнения. Если они не работают для того, что вы пытаетесь сделать, возможно, вы неправильно подходите к своей проблеме. - person Joe; 26.09.2011
comment
См. мой вопрос: stackoverflow.com/questions/7560989/ - person Muhammad Hewedy; 27.09.2011
comment
У вас есть образец JSON, который вы пытаетесь декодировать? Я думаю, если бы у вас это было и вы могли бы объяснить, как выглядит граф объектов, в который он должен преобразовываться, вы получите лучшие ответы. - person Flyingdiver; 27.09.2011