我可以从键的一个值访问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,如果有人告诉我如何传递"product_idProducts"的值,假设2,它会返回名称。有可能吗?如果没有,那么我如何将这两个值结合起来?

这很简单,但你必须编写一个方法来处理它,首先在你的第二个响应上创建一个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 
}

如果我误解了你的问题,我很抱歉,但据我所知,你可以简单地使用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;
}

最好这应该使用枚举键或您自己的模型对象,以获得更多的类型安全性,但这应该让您开始。

最新更新