2013-02-07 3 views
1

Je ne suis pas en train de déterminer comment exécuter une requête dans Azure. J'ai finalement trouvé des inserts, mais maintenant j'essaye d'interroger Azure. Deux parties ici, comment puis-je retourner le résultat d'Azure et comment lire les résultats dans l'objectif-C?Query Azure à partir d'iOS

Jusqu'à présent, j'ai ce

-(double)GetValidAppVersion 
{ 
// Create a proxy client for sending requests to the Azure platform. 
MSClient *client = [MSClient clientWithApplicationURLString : @"" 
             withApplicationKey : @"]; 
MSTable *appSettingsTable = [client getTable:@"AppSettings"]; 
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"Key == AppVersion"]; 
NSArray *queryResults = [[NSArray alloc] init]; 
[appSettingsTable readWhere:predicate completion:^(NSArray *results, NSInteger totalCount, NSError *error) 
{ 
    self.items = [results mutableCopy]; 
}]; 

return 1.0; 

}

Je n'ai pas compris du côté Azure soit. Comment puis-je interroger et renvoyer un résultat en fonction du paramètre d'entrée?

Ma table est simple avec ID int clé varchar Valeur varchar

Toute aide à obtenir ce que cela va est grandement appréciée.

Edit:

J'ai ajouté à mon contrôleur

-(bool) IsAppVersionValid 
{ 
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
double validAppVersion = [delegate.appVersion doubleValue]; 
double serverAppVersion; 

NSDictionary *item = @{ @"complete" : @(NO) }; 
[self.Service SelectAppVersion:item completion:^(NSUInteger index) 
{ 
}]; 

return true;//clientVersion >= validAppVersion; 
} 

Et cela à mon service (ce qui est bâclée comme il devrait être un simple bloc d'achèvement - Je voudrais passer NSString * avec la AppSettings valeur de clé et l'utiliser dans le prédicat ainsi. Toute réflexion sur la syntaxe pour cela?

typedef void (^CompletionWithAppVersionBlock)(NSUInteger index); 

- (void) SelectAppVersion:(NSDictionary *) item 
completion:() completion; 

Répondre

2

Toutes la table de lecture méthodes de lecture qui font partie du SDK iOS mobile Les services sont asynchrones, ce qui signifie que vous devez leur passer un bloc d'achèvement (comme vous le faites ci-dessus où vous définissez self.items = [results mutableCopy];) afin de faire quelque chose avec les résultats qu'ils récupèrent. Cela signifie que pour obtenir la valeur que vous recherchez, vous devez transférer un bloc d'achèvement dans votre méthode GetValidAppVersion. Vous pouvez ensuite passer la version de l'application que vous revenez à ce bloc. Donc, quelque chose comme ceci:

-(void) GetValidAppVersion:(NSDictionary *)item completion:(CompletionWithVersion)completion 
{ 
    MSTable *appSettingsTable = [client getTable:@"AppSettings"]; 
    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"Key == AppVersion"]; 
    NSArray *queryResults = [[NSArray alloc] init]; 
    [appSettingsTable readWhere:predicate completion:^(NSArray *results, NSInteger totalCount, NSError *error) 
    { 
     completion([results objectAtIndex:0]); 
    }]; 
} 

vous devez définir le CompletionWithVersion comme étant un bloc avec un paramètre retourné (le appversion). Jetez un oeil à l'application de démarrage rapide iOS pour voir comment les blocs d'achèvement sont définis.

+0

Ok, je l'ai maintenant, mais bloqué sur comment cela fonctionne réellement. – MisterOver

+0

Pourvu qu'il fonctionne maintenant, je lirais sur les blocs pour obtenir une meilleure compréhension (comme ici: http://chrisrisner.com/31-Days-of-iOS--Day-7%E2%80%93Making-Network -Requêtes). Essentiellement, les appels MSTable (comme readWhere) s'attendent à recevoir un bloc de code qu'ils peuvent appeler quand ils sont terminés. Il n'y a aucun moyen (en dehors de regarder le SDK et de trouver comment faire un appel synchrone) de faire ce que vous faisiez à l'origine. Est ce que ça aide? – Chris

Questions connexes