我有以下小代码难题......
- (void) transmitArray {
NSString* arrayName = @"array1";
NSArray* array1 = [NSArray arrayWithObject:@"This is Array 1"];
NSArray* array2 = [NSArray arrayWithObject:@"This is Array 2"];
NSMutableArray* targetArray = [NSMutableArray arrayWithCapacity:1];
}
有没有办法使用字符串“array1”来访问NSArray'array1'所以我可以将它复制到目标数组中..因此,如果字符串读取“array2”,我将能够访问第二个数组?
我读到了使用NSSelectorFromString来创建选择器,并且这种技术被称为“内省”,但除此之外,我感到难过......
希望有人可以提供帮助!
答案 0 :(得分:1)
如果您将array1
声明为属性,则可以这样执行:
#import "ViewController.h"
@interface ViewController ()
@property NSArray *array1;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.array1 = [NSArray arrayWithObjects:@"Hello", @"world!", nil];
NSArray *array2 = [self valueForKeyPath:@"array1"];
NSLog(@"%@", array2);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
答案 1 :(得分:1)
不是真的。如果它是类的实例变量(通常称为属性),那么您可以使用内省来检查对象并获取/设置所需的变量。您可以使用KVO方法
setValue:(id) ForKeyPath:(NSString *)
和
valueForKeyPath:(NSString *)
访问它们
但是,您无法使用实例方法(直接)内部声明的局部变量来执行此操作。我建议用你的数组填充一个字典,然后用它作为查找表
NSMutableDictionary *arrays = [[NSMutableDictionary alloc] init];
NSArray *array1 = @[@"This is Array 1"];
[arrays setObject:array1 forKey:@"array1"];
NSArray *array2 = @[@"This is Array 2"];
[arrays setObject:array1 forKey:@"array2"];
//grab a copy of array1
NSArray *targetArray = [arrays[@"array1"] copy];