Как объявить массив классов в цели c - PullRequest
2 голосов
/ 11 октября 2010

Я могу объявить NSMutableArray или NSArray, но я хочу объявить массив классов.Допустим, пользователь является классом, поэтому я могу объявить массив как:

user* obj[10];

, он действителен в Objective c, но я не уверен, как я могу динамически устанавливать емкость массива.Что мы обычно делаем с MutableArray как initWithCapacity: ..

Это то, что я делаю с классом:

user* objuser;
CustomOutput* output = [[CustomOutput alloc] init];
[objuser cutomSerialize:output];
NSMutableData* data = output.data;

Но если у меня есть массив как:

NSMutableArray* aryUserObj;

Я не могу вызвать cutomSerialize метод из arryUserObj.

Я хочу сериализовать все userObj по одному и получить один объект NSData.

Ответы [ 2 ]

4 голосов
/ 11 октября 2010

Стандартный подход к сериализации массива объектов заключается в определении encodeWithCoder: и initWithCoder: в вашем User объекте:

@interface User: NSObject {
 ....
}
-(void)encodeWithCoder:(NSCoder*)coder ;
-(id)initWithCoder:(NSCoder*)coder;
@end 

То, что у вас есть в CustomSerialize, должно быть в этих методах.

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

User* user=... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:user];

и расшифровать его:

User* user=[NSKeyedUnarchiver unarchiveObjectWithData:data];

Если у вас есть массив объектов,

NSMutableArray* array=... ; // an array of users
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];

и

NSArray* array=[NSKeyedUnarchiver unarchiveObjectWithData:data];

Итерация по массиву выполняется автоматически. Также обратите внимание, что вы не получите обратно изменяемый массив, это неизменный массив.

2 голосов
/ 11 октября 2010
NSMutableArray * users = [NSMutableArray array];
for (int i = 0; i < someNumber; ++i) {
  User * aUser = [[User alloc] initWithStuff:someStuff];
  [users addObject:aUser];
  [aUser release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...