2010-06-19 60 views
0

我喜歡從我有的typedef結構中創建一個數組。帶結構的NSMutableArray

它工作正常,當我與固定的數組大小工作。但只是要開放更大的數組我想我必須使用nsmutable數組。但在這裏我不明白它運行

//------------ test STRUCT 
typedef struct 
{ 
    int id; 
    NSString* picfile; 
    NSString* mp3file; 
    NSString* orgword; 
    NSString* desword; 
    NSString* category; 
} cstruct; 

//------- Test Fixed Array 
cstruct myArray[100]; 
myArray[0].orgword = @"00000"; // write data 
myArray[1].orgword = @"11111"; 

NSLog(@"Wert1: %@",myArray[1].orgword); // read data *works perfect 



//------ Test withNSMutable 
NSMutableArray *array = [NSMutableArray array]; 
    cstruct data; 
    int i; 
    for (i = 1; i <= 5; i++) { 
    data.orgword = @"hallo"; 
    [array addObject:[NSValue value:&data withObjCType:@encode(struct cstruct)]]; 
} 

data = [array objectAtIndex:2]; // something is wrong here 
NSLog(@"Wert2: %@",data.orgword); // dont work 

任何簡短的演示,工程,將不勝感激:)仍在學習

THX 克里斯

+0

你的數組正在返回一個NSValue的實例...這就是你放在那裏的東西。所以,閱讀:[[array objectAtIndex:2] getValue:&data]; – 2010-06-19 16:15:07

+0

行! :) THX,現在它的作品:) – 2010-06-19 16:34:43

回答

6

這是極不尋常的混合含Objective-C的類型與結構Objective-C中的對象。雖然可以使用NSValue來封裝結構,但這樣做很脆弱,難以維護,並且在GC下可能無法正確運行。

相反,一個簡單的類往往是一個更好的選擇:

@interface MyDataRecord:NSObject 
{ 
    int myRecordID; // don't use 'id' in Objective-C source 
    NSString* picfile; 
    NSString* mp3file; 
    NSString* orgword; 
    NSString* desword; 
    NSString* category; 
} 
@property(nonatomic, copy) NSString *picfile; 
.... etc .... 
@end 

@implementation MyDataRecord 
@synthesize picfile, myRecordID, mp3file, orgword, desword, category; 
- (void) dealloc 
{ 
     self.picfile = nil; 
     ... etc .... 
     [super dealloc]; 
} 
@end 

這也使得這樣的,你需要添加業務邏輯的時間到上述數據記錄,你已經有一個方便的地方這樣做。