【问题标题】:Objective C How to merge multiple NSMutableArray?Objective C 如何合并多个 NSMutableArray?
【发布时间】:2018-01-18 14:04:16
【问题描述】:

我有几个NSMutableArrays,例如 arr1,arr2,arr3,arr4。如何将所有 NSMutableArrays 合并在一起?或者有什么方法可以多次附加到一个数组中?

示例:

arr = [[NSMutableArray alloc] init];
//first loop
for(condition){
    [arr addObject:firstLoopValue];
}
//second loop
for(condition){
    [arr addObject:secondLoopValue];
}
//third loop
for(condition){
    [arr addObject:thirdLoopValue];
}

最后的结果{firstLoopValue...secondLoopValue...thirdLoopValue}

我是 iOS 新手,所以不确定是否可行。提前致谢

编辑 我已经尝试了以下两种方式:

rCodeArr = [[NSMutableArray alloc] init];
rDateArr = [[NSMutableArray alloc] init];
rAmountArr = [[NSMutableArray alloc] init];

jCodeArr = [[NSMutableArray alloc] init];
jDateArr = [[NSMutableArray alloc] init];
jAmountArr = [[NSMutableArray alloc] init];
jBalanceArr = [[NSMutableArray alloc] init];

NSArray *component = [journal getComponents:custCode];
for(int i = 0; i < [component count]; i++){

    list = [component objectAtIndex:i];

    NSArray *timestamp = [list.jDate componentsSeparatedByString:@" "];
    NSString *splitdate = timestamp[0];

    [jCodeArr addObject:list.jCode];
    [jDateArr addObject:splitdate];
    [jAmountArr addObject:list.jAmount];
    [jBalanceArr addObject:list.jOutstanding];
}
NSArray *rcom = [receipt getComponents:custCode];
for(int j = 0; j < [rcom count]; j++){

    rList = [rcom objectAtIndex:j];

    NSArray *rtime = [rList.rDate componentsSeparatedByString:@" "];
    NSString *rsplit = rtime[0];

    [rCodeArr addObject:rList.rCode];
    [rDateArr addObject:rsplit];
    [rAmountArr addObject:rList.rAmount];
    [rBalanceArr addObject:@"N/A"];
}

lblOneArray = [NSMutableArray arrayWithArray:rCodeArr];

    [lblOneArray addObjectsFromArray:jCodeArr];
    lblTwoArray = [NSMutableArray arrayWithArray:rDateArr];

    [lblTwoArray addObjectsFromArray:jDateArr];
    lblThreeArray = [NSMutableArray arrayWithArray:rAmountArr];

    [lblThreeArray addObjectsFromArray:jAmountArr];
    lblFourArray = [NSMutableArray arrayWithArray:jBalanceArr];
    [lblFourArray addObjectsFromArray:rBalanceArr];

lblOneArray = [[NSMutableArray alloc] init];
lblTwoArray = [[NSMutableArray alloc] init];
lblThreeArray = [[NSMutableArray alloc] init];
lblFourArray = [[NSMutableArray alloc] init];
[lblOneArray addObjectsFromArray:rCodeArr];
[lblOneArray addObjectsFromArray:jCodeArr];

[lblTwoArray addObjectsFromArray:rDateArr];
[lblTwoArray addObjectsFromArray:jDateArr];

[lblThreeArray addObjectsFromArray:jAmountArr];
[lblThreeArray addObjectsFromArray:jAmountArr];

[lblFourArray addObjectsFromArray:rBalanceArr];
[lblFourArray addObjectsFromArray:jBalanceArr];

但它仍然崩溃并显示消息 ***** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]”

注意所有这些都是 NSMutableArray

【问题讨论】:

  • 放置断点并查看它在哪一行崩溃

标签: ios objective-c arrays for-loop nsmutablearray


【解决方案1】:

要组合多个数组,您可以使用第一个数组的元素初始化数组,然后从中添加元素:

NSMutableArray* arr1 = [NSMutableArray arrayWithArray: firstLoopValue];
[arr1 addObjectsFromArray: secondLoopValue];
[arr1 addObjectsFromArray: thirdLoopValue];
[arr1 addObjectsFromArray: forthLoopValue];

【讨论】:

  • 应用程序崩溃并显示消息 [__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]
【解决方案2】:

您可以通过添加所有数组来创建最终数组,如下所示

NSMutableArray *newArray = [[NSMutableArray alloc] init];

[newArray addObjectsFromArray:firstArray];

[newArray addObjectsFromArray:secondArray];

我用下面的代码检查过它没有崩溃

NSMutableArray *arr1 = [[NSMutableArray alloc]initWithObjects:@"1", @"2", nil];
NSMutableArray *arr2 = [[NSMutableArray alloc]initWithObjects:@"3", @"4", nil];

NSMutableArray *finalArray  = [[NSMutableArray alloc]init];
[finalArray addObjectsFromArray:arr1];
[finalArray addObjectsFromArray:arr2];

【讨论】:

  • 我这样用过[lblOneArray addObjectsFromArray:rCodeArr]; [lblOneArray addObjectsFromArray:jCodeArr]; [lblTwoArray addObjectsFromArray:rDateArr]; [lblTwoArray addObjectsFromArray:jDateArr]; [lblThreeArray addObjectsFromArray:jAmountArr]; [lblThreeArray addObjectsFromArray:rAmountArr]; [lblFourArray addObjectsFromArray:jBalanceArr];,但它崩溃了
  • 如果它崩溃了,那么可能是你做错了什么。确保您使用的是可变数组
  • 我已经用代码编辑了这个问题。你现在可以检查吗?
  • 正如您在代码中提到它与 [__NSArrayM objectAtIndex:] 崩溃:索引 5 超出范围 [0 .. 4] 然后在 list = [component objectAtIndex:i];或 rList = [rcom objectAtIndex:j];
  • @property (nonatomic, strong) NSString *jCode,*jDate,*jAmount,*jOutstanding,*jId,*jCust_code,*jPos,*jCancelled; @property (nonatomic, strong) NSString *rCode,*rDate,*rAmount,*rId,*rCust_code,*rCancelled; 这些是我拥有的对象..为什么会导致错误?
【解决方案3】:

就做吧

arr = [[NSMutableArray alloc] init];
[arr addObjectsFromArray:anArray1];
[arr addObjectsFromArray:anArray2];
[arr addObjectsFromArray:anArray3];

【讨论】:

  • 让我试试这个
  • 我的应用程序崩溃了
  • @MohammadJulfikar 崩溃说明了什么?
  • 您是否已将 lblOneArray、lblTwoArray 创建为可变数组?
  • 是的,我将它们创建为可变数组。崩溃说索引超出范围
【解决方案4】:

1) 按对象

NSArray *array = [NSArray arrayWithObjects: @"xyz" ,nil];

array = [array arrayByAddingObject:@"abc"];

array = [array arrayByAddingObject:@"kart"];

2) 按数组

NSMutableArray* main = [NSMutableArray arrayWithArray: temp];

[main addObjectsFromArray: temp2];

[main addObjectsFromArray: temp3];

[main addObjectsFromArray: temp4];

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多