如何将一个 NSArray 数据添加到另一个 NSArray 字段?

How to add one NSArray data to another NSArray fields?

我觉得问题标题有点不匹配,你能看看下面的解释吗...

目前我有 2 个 NSArray 的数据:

 NSArray *arr1 = [[NSArray alloc]initWithObjects:@"aa",@"bb",@"1",@"cc", nil];

 NSArray *arr2 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

1st 数组中,我从服务器

获取数据

我需要在 2nd 数组

中的特定 UILabel 中加载这些参数

我在看O/P是::

self.lbl1.text = @"aa";

self.lbl2.text = @"bb";

self.lbl3.text = @"1";

self.lbl4.text = @"cc";

有没有办法,你能帮帮我吗..

ViewController.h

@property (strong, nonatomic)IBOutlet UILabel* lbl1;
@property (strong, nonatomic)IBOutlet UILabel* lbl2;
@property (strong, nonatomic)IBOutlet UILabel* lbl3;
@property (strong, nonatomic)IBOutlet UILabel* lbl4;

ViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

NSArray *arr1 = [[NSArray alloc]initWithObjects:@"aa",@"bb",@"1",@"cc", nil];
NSArray *arr2 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

for(int i=0;(i<[arr1 count])&&(i<[arr2 count]);i++)
{
    UILabel *label = (UILabel*)[arr2 objectAtIndex:i];
    label.text = (NSString*)[arr1 objectAtIndex:i];
}
NSLog(@"%@,\n %@,\n %@, \n%@",self.lbl1,self.lbl2,self.lbl3,self.lbl4);

}

崩溃 赞:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
 *** First throw call stack:

您不能直接这样做,但可以将 arr2 设置为:

arr2 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

然后是

for (UILabel *lbl in arr2) {
    NSInteger i=[arr2 indexOfObject:lbl];
    lbl.text = [arr1 objectAtIndex:i];
}

将标签存储在数组中,而不是它们的文本 属性。

NSArray *arr1 = [[NSArray alloc]initWithObjects:@"aa",@"bb",@"1",@"cc", nil];
NSArray *arr2 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

for(int i=0;(i<[arr1 count])&&(i<[arr2 count]);i++)
{
  UILabel *label = (UILabel*)[arr2 objectAtIndex:i];
  label.text = (NSString*)[arr1 objectAtIndex:i];
}

检查两者的计数,例如:(i<[arr1 count])&&(i<[arr2 count]) 确保如果数组以某种方式变得不同,应用程序不会崩溃。

假设两个数组的大小相同,你可以这样做:

NSArray *arr3 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

for (NSUInteger i = 0; i < arr1.count; i++) {
    arr3[i].text = arr1[i];
}

如果从服务器接收到的数组大小可能不同,您可以使用 MIN(arr1.count, arr3.count),即两个大小中的最小值,这样您就不会得到 out-of-bounds 异常:

for (NSUInteger i = 0; i < MIN(arr1.count, arr3.count); i++) {
    arr3[i].text = arr1[i];
}

简答:不可能按照您想要的方式去做。

这是因为 self.lbl1.text 是一个 NSString,不再附加到 self.lbl1text 是 UILabel 的副本 属性)。如果你改变这个 NSString,你 不会改变 self.lbl1.text

的值

更好的方法可能是只保存标签,而不是它的值:

NSArray *arr2 = @[self.lbl1, self.lbl2, self.lbl3, self.lbl4];

在这种情况下,您可以遍历数组:

for (NSInteger i=0; i < arr2.count && i < arr1.count; i++) {
    ((UILabel*)[arr2 objectAtIndex:i]).text = [arr1 objectAtIndex:i];
}