我想在运行时动态创建实例变量,并且我想将这些变量添加到一个类别中。实例变量的数量可能会根据我用于定义它们的配置/属性文件而改变。
有任何想法吗??
使用关联引用- 这很棘手,但这是专门为您的用例发明的机制。
这是上面链接中的一个示例:首先,您定义一个引用并将其添加到您的对象中,使用objc_setAssociatedObject
; 然后您可以通过调用objc_getAssociatedObject
.
static char overviewKey;
NSArray *array = [[NSArray alloc] initWithObjects:@ "One", @"Two", @"Three", nil];
NSString *overview = [[NSString alloc] initWithFormat:@"%@", @"First three numbers"];
objc_setAssociatedObject (
array,
&overviewKey,
overview,
OBJC_ASSOCIATION_RETAIN
);
[overview release];
NSString *associatedObject = (NSString *) objc_getAssociatedObject (array, &overviewKey);
NSLog(@"associatedObject: %@", associatedObject);
objc_setAssociatedObject (
array,
&overviewKey,
nil,
OBJC_ASSOCIATION_ASSIGN
);
[array release];
我倾向于只使用一个NSMutableDictionary
(参见NSMutableDictionary Class Reference)。因此,您将拥有一个 ivar:
NSMutableDictionary *dictionary;
然后你会初始化它:
dictionary = [NSMutableDictionary dictionary];
然后,您可以在代码中动态地将值保存到其中,例如:
dictionary[@"name"] = @"Rob";
dictionary[@"age"] = @29;
// etc.
或者,如果您正在读取文件并且不知道键的名称将是什么,您可以通过编程方式执行此操作,例如:
NSString *key = ... // your app will read the name of the field from the text file
id value = ... // your app will read the value of the field from the text file
dictionary[key] = value; // this saves that value for that key in the dictionary
如果您使用的是旧版本的 Xcode(4.5 之前),则语法为:
[dictionary setObject:value forKey:key];
完全取决于你想要做什么,这个问题很模糊,但如果你想要几个对象或几个整数等等,数组是要走的路。假设您有一个包含 100 个数字的列表。你可以做这样的事情:
NSArray * array = [NSArray arrayWithContentsOfFile:filePath];
// filePath is the path to the plist file with all of the numbers stored in it as an array
这会给你一个 NSNumbers 数组,然后你可以把它变成一个整数数组,如果你想要这样的话;
int intArray [[array count]];
for (int i = 0; i < [array count]; i++) {
intArray[i] = [((NSNumber *)[array objectAtIndex:i]) intValue];
}
每当您想从某个位置获取整数时,假设您想查看第 5 个整数,您可以这样做:
int myNewInt = intArray[4];
// intArray[0] is the first position so [4] would be the fifth
只需研究使用 plist 来提取数据,通过解析 plist 在代码中创建自定义对象或变量的数组将非常容易。