如何通过索引从一个ViewController发送图像数组到iOS中的另一个ViewController?

时间:2014-11-14 06:20:14

标签: ios arrays json

我是iOS开发中的新手。我创建一个包含JSON数据的应用程序我将该数据解析为数组,此数组也包含另一个数组,它也被索引解析为

if (responsedata.length > 0)
{
    NSError* error;

    self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error];
    if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]])
    {
        NSArray *arr = (NSArray *)[_json objectForKey:@"data"];
        [self.imageArray addObjectsFromArray:arr];
        [self.storeViewTable reloadData];
    }
    self.storeViewTable.hidden=FALSE;
    }
    for(NSDictionary *dict in self.imageArray )
    {
    [self.imagesa addObject:@{@"demopage":[dict valueForKey:@"demopage"]}];
    }
    NSLog(@"Array Count %@",self.imagesa);
    NSLog(@"Another array Count %d",[self.imageArray count]);
}

它是给我数组我想要的,现在我通过索引按索引显示这个self.imagesa数组当我的TableviewCell按钮被按下然后我添加标签TableViewCell按钮和写方法就像

preview.tag=indexPath.row;

我设置了一个标记我的预览按钮,并且是像

一样的Action方法
-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);
if (row == 0)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[1][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
if (row == 1)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[2][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
}

这里showPreviewSeondSection是我的预览按钮按下Actionmethod这里我只有两个Cell然后它工作得非常好并将我的self.imagesa数组发送到PreviewViewController视图控制器但在我的应用程序中的未来我的TableViewCell增加了然后我如何设置For循环或者如果循环发送数据到我的PreviewView控制器请给我解决方案。 当我编辑我的代码作为myButton按下事件

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

for (row = 1; row<[self.imagesa count]; row++)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[row][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
}

然后它只显示所有按钮的第一个索引数据。

2 个答案:

答案 0 :(得分:0)

正如我在你的代码中注意到的那样...... 当row = 0时,您将在索引1处发送数组 当row = 1时,您将在索引2处发送数组  所以这可以像这样动态完成,

您不需要传递硬编码索引,您需要传递行+ 1索引

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
preview.imagesa=self.imagesa[row+1][@"demopage"];
[self presentViewController:preview animated:YES completion:nil];

}

答案 1 :(得分:0)

你不需要写条件,在单元格按钮操作时我们将得到索引。

您可以使用下面的代码发送相同的数据,如果您想发送下一个对象,那么您可以将行增加1。

NSInteger row = (button.tag+1);

如果'row'数字大于'self.imagesa'数组中的对象数,那么应用程序将崩溃抛出'NSArray Outofbounds ...'例外。

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

// remove the commented part only

// if (row == 0)
// {
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[row][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
//}
//if (row == 1)
//{
//    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
 //   preview.imagesa=self.imagesa[2][@"demopage"];
 //   [self presentViewController:preview animated:YES completion:nil];
 //   NSLog(@"Preview array %@",preview.imagesa);
//}
}