J'ai associé mon application à une UTI pour que les utilisateurs puissent lancer des pièces jointes KML. Dans le délégué de l'application iPad de mon application universelle, je peux voir le launchOptions et à partir de ceux-ci, je reçois un NSURL pour le fichier en cours de lancement. Je veux stocker cela comme un global afin que je puisse y accéder d'ailleurs dans mon application, je le fais en utilisant un singleton appelé Engine. Ceci est mon délégué App:persistante launchOptions NSURL comme variable globale
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Engine *myEngine=[Engine sharedInstance];
StormTrackIpad *newVC=[[StormTrackIpad alloc] initWithNibName:@"StormTrackIpad" bundle:nil];
[window addSubview:newVC.view];
NSURL *launchFileURL=(NSURL *)[launchOptions valueForKey:@"UIApplicationLaunchOptionsURLKey"];
myEngine.launchFile=launchFileURL;
/* Show details of launched file
NSString *message =launchFileURL.absoluteString;
NSString *title = [NSString stringWithFormat:@"Opening file"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
*/
[window makeKeyAndVisible];
return YES;
}
Ma classe de moteur ressemble à ceci:
// Engine.h
#import <Foundation/Foundation.h>
@interface Engine : NSObject {
NSURL *launchFile;
}
+ (Engine *) sharedInstance;
@property (nonatomic, retain) NSURL *launchFile;
@end
// Engine.m
#import "Engine.h"
@implementation Engine
@synthesize launchFile;
static Engine *_sharedInstance;
- (id) init
{
if (self = [super init])
{
// custom initialization
}
return self;
}
+ (Engine *) sharedInstance
{
if (!_sharedInstance)
{
_sharedInstance = [[Engine alloc] init];
}
return _sharedInstance;
}
@end
Mon problème est que lorsque je tente d'accéder à la variable launchFile du moteur ailleurs dans mon application (d'une Voir Controller) le débogueur affiche la valeur de Engine.launchFile à être. J'accède à la variable comme ceci:
- (void)viewDidLoad {
[super viewDidLoad];
Engine *myEngine=[Engine sharedInstance];
NSURL *launchFile=myEngine.launchFile;
NSString *title = [NSString stringWithFormat:@"Opening file"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:launchFile.absoluteString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
Une aide?
Salut Sam, J'ai changé ma clé comme vous l'avez suggéré. Je ne suis pas sûr de vous avoir suivi lors de la définition d'un point d'arrêt sur myEngine.launchURL (même en supposant que vous vouliez dire myEngine.launchFile). Où/comment est-ce que je définirais ceci et comment je le regarderais? Je ne sais pas comment déboguer mon application lorsque je la lance depuis une autre application (Mail). J'ai ajouté le journal suivant à la fois dans le délégué de l'application après avoir défini myEngine.launchFile, et dans le View Controller. Dans le délégué, il signale l'URL correcte, dans le VC il signale null. \t NSLog (@ "URL de fichier de lancement:% @", myEngine.launchFile.absoluteString); J'apprécie vraiment votre aide, merci! JP –
Oh, j'ai ajouté les remplacements suggérés aussi ... :-) –
Vous avez raison sur myEngine.launchURL - Je voulais dire myEngine.launchFile! J'ai changé la question pour la rendre plus claire pour quiconque la lisait :) – deanWombourne