我想用我拥有的typedef结构制作一个数组。
当我使用FIXED数组大小时,它工作正常。但只是为更大的阵列开放我想我必须使用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 :(得分: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
这也使得当您需要将业务逻辑添加到所述数据记录时,您已经有了一个方便的地方。