我可以从一个值中访问NSDictionary中的所有值吗?

时间:2015-03-25 10:14:40

标签: ios objective-c json nsdictionary

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

第一个回应:

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它返回我的名称。可能吗 ?如果没有那么我怎样才能将这两个价值结合起来?

2 个答案:

答案 0 :(得分:0)

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

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 

}

答案 1 :(得分:0)

如果我误解了您的问题,我很抱歉,但据我了解,您只需使用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;
}

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