2016-07-15 5 views
-1

У меня есть NSMutableArray 'myArray', в котором содержится некоторый customObject 'A', Теперь я хочу преобразовать 'myArray' в tempArray, в котором содержится некоторый объект, подкласс 'A', названный как 'B'. В собственности так же, как следующие:Устранение неполадок на NSArray

NSMutableArray <B *> tempArray; 
tempArray = [myArray mutableCopy]; 

Но объект в tempArray всегда является своего рода «А». Я хочу преобразовать 'A' в 'B', любое предложение?

+0

вы можете показать ваш попробовал код –

+0

если вы будете делать tempArray = туАггау всегда будет типа А не типа В, и что цель сделайте это –

+0

Разработайте это, пожалуйста, больше. Вы хотите поднять объекты A до своего подкласса B ?? –

ответ

1

«B» имеет больше имущества, которое я хочу использовать.

Как вы ожидаете, что это сработает? B - ребенок A, он содержит дополнительную информацию (собственность, которую вы хотите использовать и т. Д.). Откуда взялись данные для этого имущества?

Вам нужен способ создания нового экземпляра B с использованием (свойств) экземпляра A и предоставления дополнительных данных B. B может уже иметь подходящий метод init, или вам, возможно, потребуется написать собственный код.

Как только у вас есть способ создать новый B, вы можете просто перебирать массив, создавая новый, создавая новый экземпляр B для каждого экземпляра A.

НТН

0

Если у вас есть неизменяемый массив (NSArray), что означает, что вы не можете добавлять или удалять объекты или заменять объекты с другими объектами. [myArray mutableCopy] создает NSMutableArray. Он будет содержать точно те же объекты, что и неизменяемый массив, но теперь вы можете добавлять или удалять или заменять объекты.

Ваше объявление NSMutableArray * tempArray ничего не значит, кроме лжи. Если myArray содержит объекты типа A *, то tempArray содержит те же объекты типа A *. Вы просто лжете, поэтому компилятор считает, что они являются объектами типа B *, но это не так.

На каком основании компилятор может автоматически преобразовать объект какого-либо объекта в объект подкласса. Если в подклассе есть дополнительные члены, например, как компилятор собирается заполнить эти элементы? Это просто не сработает.

Если вы хотите, чтобы создать новые объекты типа B *, основанные на объектах типа А *, вы должны сделать это вручную, вероятно, используя Инициализатор как

- (instancetype)initWithA:(A*)a; 

в интерфейсе B. Ваш код может быть, например

NSMutableArray <B*> *tempArray = [myArray mutableCopy]; 
for (NSUInteger i = 0; i < tempArray.count; ++i) { 
    tempArray [i] = [[B alloc] initWithA:tempArray [i]]; 
} 

или, возможно,

NSMutableArray <B*> *tempArray = [[NSMutableArray alloc] init]; 
for (A* a in myArray) 
    [tempArray addObject:[[B alloc] initWithA:a]]; 
Смежные вопросы