Если у вас есть неизменяемый массив (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]];
вы можете показать ваш попробовал код –
если вы будете делать tempArray = туАггау всегда будет типа А не типа В, и что цель сделайте это –
Разработайте это, пожалуйста, больше. Вы хотите поднять объекты A до своего подкласса B ?? –