如何将一个 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.lbl1
(text
是 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];
}
我觉得问题标题有点不匹配,你能看看下面的解释吗...
目前我有 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.lbl1
(text
是 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];
}