2009-05-15 6 views
0

Also ich bin ein Typ Flash und ich versuche, den folgenden Code zu konvertieren Objekt C:Iphone Objekt C - Daten, Objekte und Arrays

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); 

Später kann ich außer Kraft setzen wie:

arrGrid[0].isEmpty = True; 

Ich kann nicht scheinen, einen Verweis auf generische Objekte in Objekt C zu finden. Kann jemand helfen?

Antwort

9

Nun vorausgesetzt, Sie tun etwas mit dem iPhone oder Mac in Kakao können Sie einfach NSObject (die Basisklasse in Ziel-C).

Sie benötigen einen .h und .m so Sie zum Beispiel wäre es so etwas wie: (Beachten Sie, dass ich slotid statt id verwendet, weil id ein Schlüsselwort in Objective-C ist)

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 

dass ein einfaches Objekt mit Slot 4 Eigenschaften definiert, die unter Verwendung von Punktschreibweise wie zugegriffen werden kann:

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

Es gibt viele Variationen für die da Welche Typen Sie verwenden und wie Sie die Eigenschaften definieren, hängt davon ab, um welche Art von Daten es sich handelt.

Wenn Sie ein Slot-Objekt in ein Array ein einfaches Beispiel hinzufügen wollte:

// 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

Das ist genau das, was ich begann hier gepostet zu tun, bevor ich. Ich werde am Morgen einen Wirbel machen. Vielen Dank!! –

+0

Ich bin nicht ganz klar, was du meinst Charles, gibt es einige Datentypen (so ziemlich alle Objekttypen in Objective-C), die Sie als Zeiger verweisen müssen. Die Verwendung von Zeigern hängt also von dem ab, was Sie versuchen zu referenzieren, und von der Art, wie Speicher für diese Typen reserviert wird. – paulthenerd

+0

Danke nochmal, ich schätze das Wissen. Ich habe hier unten eine andere Frage gestellt. –

1

Wenn Sie nur mit dieser Objektinstanz speichern genannten Werte, Sie eine Instanz von NSMutableDictionary stattdessen verwenden können, obwohl Sie werden Ihre integer-Werte mit NSNumber Instanzen wickeln müssen:

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"]; 

Dann können Sie diese auf eine NSMutableArray [NSMutableArray array] o.ä. zugewiesenen hinzufügen würde:

[array addObject: obj]; 

Um die integer/Boolesche Werte aus dem Wörterbuch zu bekommen, werden Sie Folgendes:

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