Utilisez un schéma d'URL. Vous pouvez ajouter différents chemins ou arguments pour différentes tâches. Par exemple, j'ai une application qui affiche plusieurs éléments dans une extension aujourd'hui. Si vous appuyez sur un élément, l'application est ouverte.
- (void)_openItem:(SPItem *)item
{
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"myapp://localhost/open_item?itemID=%@", item.itemID]];
if (url != nil)
{
[self.extensionContext openURL:url completionHandler:nil];
}
}
Comme vous l'avez déjà mentionné en vous la question, vous devez mettre en œuvre - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
Dans mon cas, plus ou moins ressemble à ceci:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
BOOL ret;
if ([url.scheme isEqualToString:@"myapp"])
{
if ([url.path isEqual:@"open_item"])
{
@try
{
NSDictionary *query = [url.query queryDictionary];
NSString* itemID = query[@"itemID"];
[self _gotoItemWithID:itemID completionHandler:nil];
}
@catch (NSException *exception) {
}
ret = YES;
}
}
else
{
ret = NO;
}
return ret;
}
Comme vous pouvez le voir, je d'abord vérifier, si le schéma d'URL. Si c'est celui que j'attends, je vérifie le chemin. En utilisant des chemins différents, je suis en mesure d'implémenter différentes commandes l'extension aujourd'hui est capable de exécuter. Chaque commande peut avoir des arguments différents. Dans le cas de la commande "open_item", j'attends le paramètre "itemID". En renvoyant OUI, vous indiquez à iOS que vous étiez en mesure de gérer l'URL avec laquelle votre application a été appelée.
Dans mon application [self _gotoItemWithID:itemID completionHandler:nil]
toutes les tâches nécessaires pour afficher l'élément. Dans votre cas, vous aurez besoin d'une fonction pour afficher le second contrôleur de vue.
Edit:
j'oublié de mentionner que queryDictionary
est une méthode dans une extension NSString. Il prend une chaîne (self
) et essaie d'extraire le paramètre URL et de le renvoyer en tant que dictionnaire.
- (NSDictionary*)queryDictionary
{
NSCharacterSet* delimiterSet = [NSCharacterSet characterSetWithCharactersInString:@"&;"];
NSMutableDictionary* pairs = [NSMutableDictionary dictionary];
NSScanner* scanner = [[NSScanner alloc] initWithString:self];
while (![scanner isAtEnd])
{
NSString* pairString;
[scanner scanUpToCharactersFromSet:delimiterSet
intoString:&pairString] ;
[scanner scanCharactersFromSet:delimiterSet intoString:NULL];
NSArray* kvPair = [pairString componentsSeparatedByString:@"="];
if ([kvPair count] == 2)
{
NSString* key = [[kvPair objectAtIndex:0] stringByRemovingPercentEncoding];
NSString* value = [[kvPair objectAtIndex:1] stringByRemovingPercentEncoding];
[pairs setObject:value forKey:key] ;
}
}
return [NSDictionary dictionaryWithDictionary:pairs];
}
Pouvez-vous fournir plus de détails? Qu'est-ce qui doit être spécifié dans cette instruction if? – Maxxer
J'essaie de le dire si l'application explicite essaie d'ouvrir l'application. Je vérifie si l'URL est nulle ou non. C'est tout. –
vérifiez la modification. –