2009-12-30 4 views
0

Имея некоторые трудности с тем, что, как я думал, было бы прямолинейным. Я пытаюсь создать массив объектов класса, но сталкиваюсь с различными проблемами. Целью было создать один класс, в котором хранился массив другого класса объектов.@Synthesize массив объектов класса?

Любая помощь приветствуется:

// Basic class unit 
@interface MobRec : NSObject { 
    NSString *MName; 
    int Speed; 
} 

@end 


// Master Class holding an array of units 
@interface MobDefs : NSObject { 
    MobRec *MobInfo; 
} 

@property(retain) MobRec *MobInfo; 

@end 


@synthesize MobInfo; 

1) От чтения, кажется, я должен создать и NSMutableArray, но как вы объявляете NSMutableArray объектов пользовательского класса? Все итерации, которые я пытаюсь вызвать, приводят к ошибкам. Раньше я предопределял размер в классе как MobInfo [20]; но это ни на что не похоже.

2) Как вы правильно @ Синтезируете массив объектов класса?

+2

Я настоятельно рекомендую следующие именования Objective-C. Классы капитализируются; методы и свойства получают строчную первую букву. Так что это будет 'MobRec * mobInfo'. – Chuck

ответ

2

NSMutableArray не имеет каких-либо проверок типа, когда вы добавляете (или читаете) его, чтобы вы могли добавлять любые объекты, которые вы хотите.

В этом случае я бы что-то вроде:

// MobRec Class 
@interface MobRec : NSObject { 
    NSString *mName; 
    int speed; 
} 

@property(retain)NSString *name; 
@property(assign)int speed; 

@end 

@implementation MobRec 

@synthesize mName, speed; 

@end 


// MobDefs Class 
#import "MobRec.h" 
@interface MobDefs : NSObject { 
    NSMutableArray *mobInfo; 
} 

@property(retain) NSMutableArray *mobInfo; 

@end 


@implementation MobDefs 

@synthesize mobInfo; 

- (id)init { 
    mobInfo = [[NSMutableArray alloc] init]; 
    MobRec *aNewMobRec = [[MobRec alloc] init]; 
    [mobInfo addObject:aNewMobRec]; 
    [aNewMobRec release]; 
} 

Я включил основы для добавления в массив, а поэтому вы можете увидеть, как его использовали. О, и не забывайте, что вы должны освободить MobInfo в методе dealloc.

Но в основном смотрят на NSMutableArray

+0

ЭТО ЧТО Я СМОТРЕТЬ! Спасибо. Не мог найти нигде еще простой синтаксис, в котором NSMutableArray не нуждался в проверке типа. Это должно помочь решить мою проблему. – user240272

+0

PS: спасибо за другой кусок для ясности. – user240272

+0

Хммм теперь мне не удается получить класс MobRec, чтобы подтвердить существование массива mobInfo. Я включил mobrec.h в mobdefs.h, но не повезло. Он должен видеть, что это не должно быть - это не должно быть так сложно. – user240272

0

Ваш MobDefs класс не нужен, вы можете напрямую использовать NSMutableArray. NSArray может содержать объекты любого типа и объявляется точно так же, как и любой другой объект (например, ваше свойство MName).

+0

Спасибо. Но есть и другие функции для всех объектов, которые мне нужны в классе MobDefs. Также наличие нескольких файлов работает лучше всего, поскольку я не единственный кодер в проекте. – user240272

3

Я думаю, что вы не понимаете, что @synthesize. Он создает методы доступа для получения и установки свойства (т. Е. Он создаст метод getter, чтобы вернуть NSMutableArray и метод setter, чтобы вы могли заменить его другим NSMutableArray). Чтобы создать NSMutableArray, вы просто создадите его, как любой другой объект в инициализаторе этого класса.