Откройте конкретный след со схемой URL из NSDictionary - PullRequest
1 голос
/ 03 октября 2010

Я использую TouchJSON для получения ответа JSON от http://enbr.co.cc/TrailsApp/shops.php. В моем приложении я использую этот код для обработки схемы URL.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if (!url) {
        return NO;
    }
    NSString *urlString = [url absoluteString];
    NSString *urlStringDecoded = [urlString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
    NSArray *list = [urlStringDecoded componentsSeparatedByString:@"="];
    NSString *urlPrefix = [list objectAtIndex:0];
    NSString *name = [list objectAtIndex:1];
    if ([urlPrefix isEqualToString:@"tridetrails://opentrail?name"]) {
        TrailViewController *trailViewController = [[TrailViewController alloc] initWithNibName:@"TrailViewController" bundle:[NSBundle mainBundle]];
        trailViewController.trailToGoto = name;
        [self.navigationController pushViewController:trailViewController animated:YES];
        [trailViewController release];
    }
    if ([urlPrefix isEqualToString:@"tridetrails://openshop?name"]) {
        ShopViewController *shopViewController = [[ShopViewController alloc] initWithNibName:@"ShopViewController" bundle:[NSBundle mainBundle]];
        shopViewController.shopToGoto = name;
        [self.navigationController pushViewController:shopViewController animated:YES];
        [shopViewController release];
    }
    return YES;
}

Как я могу вставить правильную запись из моего NSDictionary, созданного из JSON, в ShopViewController на основе имени NSString? Вот мой словарь, напечатанный NSLog с NSLog (@ "% @", myObj) ;. Заранее спасибо.

{
    shops =     (
                {
            blurb = "Bootdoctors blurb";
            image = bootdoctorslogo;
            locations = "Mountain Village";
            motto = "Bootdoctors shop motto";
            name = Bootdoctors;
        },
                {
            blurb = "Easy Rider blurb";
            image = easyriderlogo;
            locations = Telluride;
            motto = "Easy Rider shop motto";
            name = "Easy Rider";
        },
                {
            blurb = "Paragon Ski & Sport blurb";
            image = paragonskiandsportlogo;
            locations = Telluride;
            motto = "Paragon shop motto";
            name = "Paragon Ski & Sport";
        },
                {
            blurb = "Telluride Sports blurb";
            image = telluridesportslogo;
            locations = "Telluride and Mountain Village";
            motto = "Telluride Sports shop motto";
            name = "Telluride Sports";
        }
    );
}

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

Вы можете использовать NSPredicate для выбора магазина (ов), который вы ищете:

    NSString* shopName = ...;

    NSArray* shops = ...;  // this is your JSON-produced array of NSDictionary Shop objects

    NSPredicate* predicate = [NSPredicate predicateWithFormat: @"name == '%@'", shopName ];

    NSArray* matchingShops = [shops filteredArrayUsingPredicate: predicate];

    NSDictionary* firstMatchingShop = [matchingShops objectAtIndex: 0];
0 голосов
/ 05 ноября 2010

Возможно, вам нужно дать немного больше информации о том, что вы пытаетесь сделать.Например, вы не говорите, как вы получаете словарь, содержащий информацию обо всех магазинах и как ShopViewController имеет доступ к этому словарю.Но выбрать один магазин по названию из словаря можно следующим образом:

NSDictionary *jsonResponse; // You don't say how the ShopViewController has access to
                            // the response so let's just assume a local variable here.

NSDictionary *foundShop = nil; // This will be selected shop after the search below

NSArray *shops = [jsonResponse objectForKey:@'shops'];

for (NSDictionary *shop in shops) {
    if ([shop objectForKey:@'name'] isEqualToString:self.shopToGoto]) {
        foundShop = shop;
        break;
    }
}

if (foundShop) {
    // Do something with the dictionary keys and values in foundShop
}
else {
    // Error condition - shop with required name is not present
    // Handle error
}
...