我创建了一个像这样的结构
typedef struct Node {
NSString* Description;
NSString* AE;
NSString* IP;
NSString* Port;
} Node;
我需要创建这个Node结构的NSMutableArray
我需要知道如何创建节点路径的对象它NSMutableArray
检索它并读取例如端口。
答案 0 :(得分:39)
遇到这个问题之后,我遇到了这个有帮助的帖子,但比我最终解决的问题更复杂。
基本上NSValue是你的struct的包装器,你不需要自己创建一个新的类。
// To add your struct value to a NSMutableArray
NSValue *value = [NSValue valueWithBytes:&structValue objCType:@encode(MyStruct)];
[array addObject:value];
// To retrieve the stored value
MyStruct structValue;
NSValue *value = [array objectAtIndex:0];
[value getValue:&structValue];
我希望这个答案会为下一个人节省一些时间。
答案 1 :(得分:13)
您实际上可以创建一个自定义类(因为它只包含NSString
个指针),并将struct值作为实例变量。我认为它甚至更有意义。
您还可以创建一个包含这些结构的NSValue
数组:
NSValue *structValue = [NSValue value:&myNode objCType:@encode(Node *)];
NSMutableArray *array = [[NSMutableArray alloc] initWithObject:structValue];
然后您可以按如下方式检索这些结构:
NSValue *structValue = [array objectAtIndex:0];
Node *myNode = (Node *)[structValue pointerValue];
// or
Node myNode = *(Node *)[structValue pointerValue];
答案 2 :(得分:3)
您只能在NSMutableArray
。
您可以采用的一种方法是使用标准C阵列:
unsigned int array_length = ...;
Node** nodes = malloc(sizeof(Node *) * array_length);
另一种方法是将结构包装在Objective-C对象中:
@interface NodeWrapper : NSObject {
@public
Node *node;
}
- (id) initWithNode:(Node *) n;
@end
@implementation NodeWrapper
- (id) initWithNode:(Node *) n {
self = [super init];
if(self) {
node = n;
}
return self;
}
- (void) dealloc {
free(node);
[super dealloc];
}
@end
然后,您可以将NodeWrapper
个对象添加到NSMutableArray
,如下所示:
Node *n = (Node *) malloc(sizeof(Node));
n->AE = @"blah";
NodeWrapper *nw = [[NodeWrapper alloc] initWithNode:n];
[myArray addObject:nw];
[nw release];
要从Node
检索NodeWrapper
,您只需执行以下操作:
Node *n = nw->node;
或
Node n = *(nw->node);