2009-05-15 9 views
0

Je suis un gars Flash et je suis en train de convertir le code suivant à l'objet C:Iphone objet C - données, objets et tableaux

var slot:Object = new Object(); 
    slot.id   = i; 
    slot.xPos  = 25*i; 
    slot.yPos  = 25*i; 
    slot.isEmpty = False; 
// push object to array 
    arrGrid.push(slot); 

plus tard je peux passer outre comme:

arrGrid[0].isEmpty = True; 

Je n'arrive pas à trouver une référence à la création d'objets génériques dans l'objet C. Quelqu'un peut-il m'aider?

Répondre

9

En supposant que vous faites quelque chose avec l'iphone ou mac dans le cacao, vous pouvez simplement sous-classer NSObject (la classe de base dans l'objectif-c).

Vous avez besoin d'un .h .m donc pour vous par exemple que ce serait quelque chose comme: (Notez que je slotid au lieu d'id parce id est un mot-clé dans c objectif)

Slot.h

// Slot.h 
@interface Slot : NSObject { 
    NSInteger slotId; 
    float xPos; 
    float yPos; 
    BOOL empty; 
} 

@property NSInteger slotId; 
@property float xPos; 
@property float yPos; 
@property BOOL empty; 

@end 

// Slot.m 
#import "Slot.h" 

@implementation Slot 

@synthesize slotId; 
@synthesize xPos; 
@synthesize yPos; 
@synthesize empty; 

@end 

qui définit un objet simple à sous avec 4 propriétés qui peuvent être accessibles en utilisant la notation par points tels que:

s = [[Slot alloc] init]; 
s.empty = YES; 
s.xPos = 1.0; 
s.yPos = 1.0; 

Il y a beaucoup de variations pour lesquelles da les types que vous utilisez et comment vous définissez les propriétés, etc. selon le type de données que vous traitez.

Si vous vouliez ajouter un objet emplacement à un tableau un exemple simple:

// create an array and add a slot object 
NSMutableArray *arr = [NSMutableArray array]; 
Slot *slot = [[Slot alloc] init]; 
[arr addObject:slot]; 

// set the slot to empty 
[[arr objectAtIndex:0] setEmpty:YES]; 
+0

C'est exactement ce que j'ai commencé à faire avant que j'ai posté ici. Je vais faire un tourbillon le matin. Merci!! –

+0

Je ne comprends pas très bien ce que vous voulez dire Charles, il y a des types de données (à peu près tous les types d'objets dans Objective-C) que vous devez référencer comme des pointeurs. Donc vraiment l'utilisation de pointeurs est déterminée par ce que vous essayez de référencer et la façon dont la mémoire est allouée pour ces types. – paulthenerd

+0

Merci encore, j'apprécie les connaissances. J'ai posté une autre question ci-dessous. –

1

Si vous utilisez seulement cette instance d'objet pour stocker des valeurs nommées, vous pouvez utiliser à la place une instance de NSMutableDictionary, bien que vous aurez besoin pour envelopper vos valeurs entières avec des instances NSNumber:

NSMutableDictionary * obj = [NSMutableDictionary dictionary]; 
[obj setObject: [NSNumber numberWithInt: i] forKey: @"id"]; 
[obj setObject: [NSNumber numberWithInt: i*25] forKey: @"xPos"]; 
[obj setObject: [NSNumber numberWithInt: i*25] forKey: @"yPos"]; 
[obj setObject: [NSNumber numberWithBool: NO] forKey: @"isEmpty"]; 

alors vous ajouter à un NSMutableArray en utilisant [NSMutableArray array] ou aFFECTÉ similaires:

[array addObject: obj]; 

Pour obtenir les valeurs entières/booléennes sur le dictionnaire, vous souhaitez effectuer les opérations suivantes:

int i = [[obj objectForKey: @"id"] intValue]; 
BOOL isEmpty = [[obj objectForKey: @"isEmpty"] boolValue];