Frage

Ich habe meine App mit einem UTI zugeordnet, so dass Benutzer KML-Anhänge starten. In der iPad-App Delegierter meiner Universal-App kann ich die launchOptions sehen und von diesen ich ein NSURL für die Datei erhalten gestartet wird. Ich möchte dies als globales so speichern, dass ich es von anderer Stelle in meiner App zugreifen kann, ich tue dies einem Singleton mit Motor bezeichnet. Das ist meine App Delegierter:

- (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;
}

Meine Motor Klasse sieht wie folgt aus:

//  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

Mein Problem ist, dass wenn ich versuche, an anderer Stelle in meinem app die launchFile Variable aus dem Motor für den Zugriff auf (von View Controller) den Debugger zeigt der Wert von Engine.launchFile zu sein. Ich bin Zugriff auf die Variable wie folgt:

- (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]; 
}

Jede Hilfe?

War es hilfreich?

Lösung

Ihr Code sieht auf den ersten Blick OK - können Sie einen Haltepunkt auf myEngine.launchFile = nur um zu sehen, was myEngine bei zeigt? Dies sollte sicherstellen, dass Ihr Singleton Code funktioniert.

Auch haben Sie überprüft, dass [launchOptions ValueForKey: @ "UIApplicationLaunchOptionsURLKey"] auf jeden Fall ein Objekt zurückgibt? Meinen Sie dieses eingeben:

[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];

Sam

P Sie sollten die Antwort auf diese Frage lesen Singleton Objekte zum Erstellen, gibt es ein paar Überschreibungen, dass Sie in Ihren Motor Klasse setzen sollten;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top