如何将可变数组的对象以数组的形式存储到另一个可变数组中。

时间:2013-05-07 12:05:46

标签: iphone ios objective-c arrays nsmutablearray

我有一个NSMutable数组,其中包含一些对象,我想将这些对象以不同数组的形式存储到不同的Mutable数组中。

例如:我有一个名为sessionArrayType4的数组,它包含这些对象。

"New Attendee Reception",
"Attendee Reception",
"Banquett",
"Tour and BBQ" 

我想存储在名为globalSessionArray的另一个Mutable数组中,我期待结果如下所示。

(("New Attendee Reception"), ("Attendee Reception"), (Banquett), (Tour and BBQ))

这是我的代码:

if(self.pickerSelectedRow == [self.typePickerArray objectAtIndex:3])
{
    for (int i =0; i< [self.sessionArrayType4 count]; i++)
    {
        if(self.displayTime == [[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"start_time"])
        {
            [self.sessionRowArray addObject:[[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"]];
            self.rowCount = self.rowCount + 1;
        }
        else
        {
            [self.sessionRowArray removeAllObjects];
            self.displayTime = [[self.sessionArrayType4 objectAtIndex:i] valueForKey:@"start_time"];
            [self.sessionRowArray addObject:[[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"]];

            [self.globalSessionArray addObject:self.sessionRowArray];

        }
    }
}

但我得到的输出是这样的:

((Tour and BBQ), (Tour and BBQ), (Tour and BBQ), (Tour and BBQ))

3 个答案:

答案 0 :(得分:1)

对于for循环的每次迭代,你将不得不将你的值分配/初始化为一个对象,否则它会不断地粘在内存中并覆盖自己。

if(self.pickerSelectedRow == [self.typePickerArray objectAtIndex:3])
{
    NSArray *
    for (int i =0; i< [self.sessionArrayType4 count]; i++)
    {
        NSObject *myNewObject = [[NSObject alloc] init];
        if(self.displayTime == [[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"start_time"])
        {
            myNewObject = [[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"];
            [self.sessionRowArray addObject: myNewObject];
            self.rowCount = self.rowCount + 1;
        }
        else
        {
            [self.sessionRowArray removeAllObjects];
            //NSLog(@"%@",self.sessionRowArray);
            self.displayTime = [[self.sessionArrayType4 objectAtIndex:i] valueForKey:@"start_time"];
            myNewObject = [[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"]];
            [self.sessionRowArray addObject:myNewObject];
            // NSLog(@"%@",self.sessionRowArray);
            [self.globalSessionArray addObject:self.sessionRowArray];
            // NSLog(@"%@",self.globalSessionArray);
        }
    }
}

答案 1 :(得分:1)

您需要在for循环中分配一个临时数组,以获得最终的数组数组。

代码非常令人困惑,但您可以像下面这样修改以获得正确的结果:

    if(self.pickerSelectedRow == [self.typePickerArray objectAtIndex:3])
    {
         for (int i =0; i< [self.sessionArrayType4 count]; i++)
         {
             if(self.displayTime == [[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"start_time"])
         {
        [self.sessionRowArray addObject:[[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"]];
        self.rowCount = self.rowCount + 1;
    }
     else
     {
         [self.sessionRowArray removeAllObjects];
         NSMutableArray* tempArray = [[NSMutableArray alloc] init];
        //NSLog(@"%@",self.sessionRowArray);
        self.displayTime = [[self.sessionArrayType4 objectAtIndex:i] valueForKey:@"start_time"];
        [tempArray addObject:[[self.sessionArrayType4 objectAtIndex:i]valueForKey:@"session_name"]];
        // NSLog(@"%@",self.sessionRowArray);
        [self.globalSessionArray addObject:tempArray];
        // NSLog(@"%@",self.globalSessionArray);
    }

答案 2 :(得分:0)

1)

if(self.pickerSelectedRow == [self.typePickerArray objectAtIndex:3])

这个表达式和类似的表达看起来不正确,因为左边的值看起来像int或NSInteger而右边的值是NSObject。如果它们都是NSObjects,则使用isEqual代替。

2)

sessionArrayType4

这是正确的,但没有严肃的程序员将这些名称用于变量。

3)由于代码不完整和许多NSLog调用,很难理解你想要什么。您还添加了JSON代码,该代码与前一部分代码特别不兼容。

首先编辑代码