Frage

Ich habe eine sehr seltsame Frage retrieving / Halte eine Variable in meiner iPhone-Anwendung delegiert (AppDelegate). Zunächst kann ich Schritt für Schritt durch und sehe, dass meine Werte Logfile übergeben werden (die NSString Variable in Frage), aber wenn Logfile von einer anderen Klasse abgerufen wird (siehe Code unten), es Störungen.

Hier ist meine AppDelegate.h-Datei:

   #import < UIKit/UIKit.h >

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *_window;

 MainViewController *_mainViewController;
 NSString *logFile;
}

@property (nonatomic, retain) NSString *logFile;
@property (nonatomic, retain) ProductClass *item;
@property (nonatomic, retain) UIWindow *window;

-(void)appendToLog:(NSString *)textToLog;
@end

Hier ist mein AppDelegate.m:

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize logFile;

- (void) applicationDidFinishLaunching:(UIApplication *)application {    
 _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

 _mainViewController = [[MainViewController alloc] init];
 UINavigationController *_navigationController = [[UINavigationController alloc] initWithRootViewController:_mainViewController];

 //Initialize the product class
     [self appendToLog:@"Application loaded"];

     [_window addSubview:_navigationController.view];
     [_window makeKeyAndVisible];
}

-(void)appendToLog:(NSString *)textToLog {
 //Append the log string
 if(logFile!=nil) {
  NSString *tmp = [[logFile stringByAppendingString:textToLog] stringByAppendingString:@"\n"];
  logFile = tmp;
 }
 else {
  NSString *tmp = [textToLog stringByAppendingString:@"\n"];
  logFile = tmp;
 }
}

@end

Wenn ich den Anruf verwenden (von einer anderen Klasse):

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *s = [appDelegate logFile];

"Logfile" kommt zurück als "out of scope", so die lokale Variable "s" Matsch ist.

Was mache ich hier falsch? Es ist nicht Sinn für mich zu machen.

War es hilfreich?

Lösung

Sie sollten logFile = tmp; mit self.logFile = tmp; ersetzen, weil Sie die verwenden müssen „Selbst“. wenn ein Präfix Ivar, um für den Code Zuweisen des richtigen settor Methode aufzurufen. Wie es ist, ist die Zuweisung Du nur die Ivar zu einer Autoreleased Objektinstanz, anstatt sie zu behalten. Das Ich." Präfix sicherzustellen, dass der Code das Richtige tut. Ohne sie ist die Zuweisung Sie nur die Variable, ohne es zu behalten.

Andere Tipps

würde ich prefixing logfile mit self in Ihrer Zuweisungsanweisung in Ihrem AppDelegate empfehlen. Zum Beispiel self.logfile = ...

Von den UIApplication Klassenreferenz - UIApplication Abtretungsempfänger und nicht die Delegierten behalten. Als erstes müssen Sie Ihre Instanz von AppDelegate initialisieren.

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