J'utilise un OpenPanel pour obtenir une URL de chemin de fichier. Cela fonctionne:Obtenir une URL depuis beginSheetModalForWindow:
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
NSURL *pathToFile = nil;
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
Cela ne veut pas, ce qui entraîne une « cession de lecture seule variable » erreur:
NSURL *pathToFile = nil;
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
return pathToFile;
En général, toute tentative d'extraire PathToFile du contexte de Opañel a échoué . Ce n'est pas un gros problème pour les petites situations, mais à mesure que mon code grandit, je suis obligé de tout bourrer - l'analyse XML, les données de base, etc. - dans une région inappropriée. Que puis-je faire pour extraire pathToFile?
Merci.
Merci. Intéressant que cela ne suive pas les lois de portée. – spamguy
Scope seul ne peut pas fonctionner parce que, comme je l'ai dit, le bloc fonctionnera longtemps après que la méthode ou la fonction dans laquelle il a été créé ait fini de tourner. Ainsi, cette étendue externe n'est plus valide lorsque le bloc s'exécute. Vous pouvez utiliser '__block' quand la fonction ou la méthode appelle le bloc lui-même, mais quand il passe le bloc à être mis en file d'attente et exécuté plus tard, cela ne fonctionnera pas, car la fonction ou la méthode sera déjà terminée au moment où le bloc va assigner à la variable. –
C'est plus que frustrant. Je suis essentiellement interdit de faire quoi que ce soit jusqu'à ce que j'en ai fini avec mon URL, volontiers ou non. Ainsi, des tâches telles que récupérer une URL puis cliquer sur un bouton pour l'utiliser sont impossibles. Pourquoi, Apple, pourquoi? – spamguy