سؤال

لقد ربطت تطبيقي باستخدام UTI حتى يتمكن المستخدمون من تشغيل مرفقات KML. في مندوب تطبيق iPad الخاص بتطبيق Universal الخاص بي ، يمكنني رؤية عمليات LaunchOptions ومن هذه الأسلحة النارية التي يتم إطلاقها. أرغب في تخزين هذا على أنه عالمي حتى أتمكن من الوصول إليه من مكان آخر في تطبيقي ، فأنا أقوم بذلك باستخدام محرك يسمى المحرك. هذا هو مندوب التطبيق الخاص بي:

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

يبدو أن فصل المحرك الخاص بي يلي:

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

مشكلتي هي أنه عندما أحاول الوصول إلى متغير إطلاق النار من المحرك في مكان آخر في تطبيقي (من وحدة التحكم في العرض) ، يوضح التصحيح قيمة المحرك. أنا أصل إلى المتغير مثل هذا:

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

أي مساعدة؟

هل كانت مفيدة؟

المحلول

يبدو الكود الخاص بك على ما يرام للوهلة الأولى - هل يمكنك ضبط نقطة توقف على myengine.launchfile = فقط لمعرفة ما الذي يشير إليه MyEngine؟ هذا يجب أن يتأكد من أن رمز المفرد الخاص بك يعمل.

أيضًا ، هل راجعت أن [LaunchOptions valueforkey:@"uiapplicationlaunchoptionsurlkey"] بالتأكيد تُرجع كائنًا؟ هل قصدت كتابة هذا:

[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];

سام

P يجب عليك قراءة أجب على هذا السؤال عند إنشاء كائنات مفردة ، هناك بعض التجاوزات التي يجب عليك وضعها في فئة المحرك الخاصة بك ؛)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top