iOS:从另一个部分提供json数据

时间:2015-03-17 14:34:20

标签: ios objective-c

我从iOS编程中略微休息了几个版本,现在我感觉有点生疏了。我想做的很简单。我的应用程序的一个部分中加载了一些Json数据,这些数据似乎在另一部分中不可用。我无法弄明白如何让它发挥作用。

第1节

- (void)addSpringBroadIcon
{
    primeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];



    primeShadowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    [primeShadowView setBackgroundColor:[UIColor whiteColor]];
    [self.view addSubview:primeShadowView];
    [primeShadowView setHidden:YES];

SESpringBoard *board2 = [SESpringBoard initWithTitle:@"Welcome" items:items launcherImage:[UIImage imageNamed:@"navbtn_home.png"]];

[primeView addSubview:board2];
    [self.view addSubview:primeView];

第2节

- (void)fetchedData:(NSData *)responseData
{
NSMutableArray *items = [NSMutableArray array];
            for (NSDictionary *dict in pJson) {
                [items addObject:[SEMenuItem initWithTitle:[dict objectForKey:@"name"] imageName:@"vitamin_d.jpg" viewController:self removable:NO]];
}
}

更新

第2节(修订)

    - (void)fetchedData:(NSData *)responseData
    {
if(responsePlaceData)
    {
        NSString *json = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        NSString *aesResponse = [AES256Util decWithString:json key:aeskey];
        //NSLog(@"AES:%@",aesResponse);
        NSData* jsonResponse = [aesResponse dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary* placeJson = [NSJSONSerialization JSONObjectWithData:jsonResponse options:kNilOptions error:nil];
        page = [[placeJson objectForKey:@"page"] intValue];
        NSLog(@"%d",page);
        if (page > 0) {
            NSDictionary* pJson = [placeJson objectForKey:@"data"];
            self.items = [NSMutableArray array];
            for (NSDictionary *dict in pJson) {
               [self.items addObject:[SEMenuItem initWithTitle:[dict objectForKey:@"name"] imageName:[dict objectForKey:@"image"] viewController:self removable:NO]];


                }

更新:我的想法是第2部分中self.items的数据应该可以在第1部分中解密。

基本上我只想在" fetchedData"中制作*项目。可用于" addSpringBoardIcon"中的* board2部分。我试着颠倒这些部分的顺序,但显然这没有用。也许更改viewController目标?我不知道。

我还尝试了各种方法来获取数据以加载IN addSpringBoardIcon ......这些都不起作用。我可以在fetchedData部分中加载所有数据(包括使项目与* board2一起使用),但这会弄乱视图。

任何想法(或者如果你需要我清理任何东西,因为我解释它的方式有点混乱)将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据您在评论中所说的内容进行回答 - 听起来您只是在这里使用一个View Controller。您的items Array是一个局部变量,这意味着它仅在fetchedData:方法的范围内可用。

你需要有一个作用于整个类的变量 - 即一个实例变量。在Objective-C中执行此操作的最佳方法是使用property

您如何创建该属性呢?可能是这样,位于实现文件的顶部。

@interface MyViewController()
@property NSMutableArray *items;
@end

@implementation MyViewController
// the rest of your code...

然后,当你想稍后在代码中访问它时,你可以使用self来实现它。

- (void)fetchedData:(NSData *)responseData
{
   self.items = [NSMutableArray array];