【问题标题】:Can I access all values in NSDictionary from one value for key?我可以从一个键值访问 NSDictionary 中的所有值吗?
【发布时间】:2015-03-25 10:14:40
【问题描述】:

您可能无法从我的问题中得到正确的理解,因为我什至不知道如何在线表达我的场景。回到我的问题。我有两个网络服务一个给我产品和其他类型的每个产品。

第一个回复:

Json : (
        {
        idProducts = 1;
        name = Product1;
    },
        {
        idProducts = 2;
        name = Product2;
    },
        {
        idProducts = 3;
        name = Product3;
    },
        {
        idProducts = 4;
        name = product4;
    }
)

第二个响应:

json: (
        {
        Name = type1;
        "Products_idProducts" = 1;
        idProductTypes = 4;
    },
        {
        Name = type1;
        "Products_idProducts" = 2;
        idProductTypes = 5;
    },
        {
        Name = type2;
        "Products_idProducts" = 2;
        idProductTypes = 6;
    },
        {
        Name = type3;
        "Products_idProducts" = 2;
        idProductTypes = 7;
    }
)

主要问题是获取产品类型并使用产品进行设置,如果我能够传递“Product_idProducts”的值,假设 2 它返回我的名称。是否可以 ?如果不是,那么我该如何结合这两个值?

【问题讨论】:

  • 你可以得到一个包含所有值的数组,比如 NSArray *arr = [yourJson valueForKey:@"Product_idProducts"];如果这是你想要的......
  • 我的回答是否解决了您的问题,还是您需要进一步说明?

标签: ios objective-c json nsdictionary


【解决方案1】:

这很简单,但您必须编写一个方法来处理它,首先在您的第二个响应中创建一个 for in 循环,例如

for (NSDictionary* dict in your.collection) {
    // get the value of product id using key "Products_idProducts"
    NSNumber* productId = dict[@"Products_idProducts"];
    // using sort descriptor fetch the product name from your first collection
    // also create a dictionary with all the required value and add into mutable array 

}

【讨论】:

    【解决方案2】:

    如果我误解了你的问题,我很抱歉,但据我了解,你可以简单地使用NSPredicate。看看我为你制作的这个示例代码:

    NSArray *products = @[
        @{
            @"idProducts": @1,
            @"name": @"Product1"
        },
        @{
            @"idProducts": @2,
            @"name": @"Product2"
        },
        @{
            @"idProducts": @3,
            @"name": @"Product3"
        },
        @{
            @"idProducts": @4,
            @"name": @"Product4"
        }
    ];
    
    NSArray *types = @[
        @{
            @"Name" : @"type1",
            @"Products_idProducts" : @1,
            @"idProductTypes" : @4
        },
        @{
            @"Name" : @"type2",
            @"Products_idProducts" : @2,
            @"idProductTypes" : @5
        },
        @{
            @"Name" : @"type2",
            @"Products_idProducts" : @2,
            @"idProductTypes" : @6
        },
        @{
            @"Name" : @"type3",
            @"Products_idProducts" : @2,
            @"idProductTypes" : @7
        },
    ];
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idProducts == 2"];
    NSArray *filteredArray = [products filteredArrayUsingPredicate:predicate];
    NSDictionary *product = filteredArray.firstObject;
    NSLog(@"Result: %@", product[@"name"]);
    

    2015-03-25 12:03:05.381 Untitled[14762:956201] Result: Product2

    如果这是您想要的,您可以简单地将这个功能包装到一个从产品类型返回产品的方法中。比如:

    - (NSDictionary *)productFromProductType:(NSDictionary *)productType {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idProducts == %@", productType[@"Products_idProducts"]];
        NSArray *filteredArray = [self.myProductsArray filteredArrayUsingPredicate:predicate];
        NSDictionary *product = filteredArray.firstObject;
    }
    

    最好这应该使用枚举作为键或您自己的模型对象以提高类型安全性 - 但这应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2014-08-14
      相关资源
      最近更新 更多