2012-04-04 4 views
0

Ich habe eine Klasse AppSettings enthält booleans:Objekt zu früh mit ARC auf iOS 5 veröffentlicht?

#import <Foundation/Foundation.h> 

@interface AppSettings : NSObject{ 

bool bip10secCountdown; 
bool jv10secCountdown; 
bool jv30secAlert; 
bool jv1minAlert; 
bool jvp5minAlert; 

} 

@property bool bip10secCountdown; 
@property bool jv10secCountdown; 
@property bool jv30secAlert; 
@property bool jv1minAlert; 
@property bool jv5minAlert; 

@end 

Und die Umsetzung:

#import "AppSettings.h" 

@implementation AppSettings 

@synthesize bip10secCountdown, jv10secCountdown, jv30secAlert, jv1minAlert, jv5minAlert; 


- (id)init 
{ 
    self = [super init]; 
    if (self){ 
    } 
    return self; 

} 

@end 

Dann versuche ich diese Klasse in meiner Hauptklasse zu verwenden, aber nach dem Objekt in der viewDidLoad Initialisierung, wenn ich es wieder verwenden möchte, erscheint es als null. Also ich denke, es ist zu früh veröffentlicht. Ich verwende ARC, sodass ich den Speicher nicht manuell verwalte. Mache ich etwas falsch ?

Die Erklärung in der Hauptklasse:

AppSettings *appSettings; 


} 

@property(nonatomic)bool activated; 
@property (nonatomic, strong) AppSettings *appSettings; 

Und die Umsetzung:

@synthetize appSettings 
... 
- (void)viewDidLoad 
{ 
    // Initialize the model 
    self.appSettings = [[AppSettings alloc]init]; 

NSLog(@"appSettings = %@",self.appSettings); 

Die erste Ausgabe ist OK. Aber wenn ich versuche, appSettings von einer anderen Methode in der Main-Klasse zuzugreifen, ist die appSettings (null)

Vielen Dank für Ihre Hilfe.

+0

Was ist die andere Methode (in der Hauptklasse), die Sie sich beziehen? Dieser Fehler wird u. U. dadurch verursacht, dass versucht wird, auf Details zuzugreifen, die in viewDidLoad initialisiert wurden, bevor die Ansicht geladen wird. –

Antwort

1

Die Ansicht wurde wahrscheinlich gelöscht, oder der View-Controller wurde freigegeben. Versuchen Sie, den Code für die Initialisierung des Verfahrens zu bewegen, wo Ihre View-Controller ausgelöst (- (id) initWithNibName: bundle :)

+0

Hallo, vielen Dank für die Antwort, ich habe versucht, das zu tun (mein View-Controller ist in der AppDeletage initiiert), aber das Verhalten ist immer noch das gleiche .. – Sinan

0

Statt:

@property (nonatomic, strong) AppSettings *appSettings; 

Versuchen:

@property (nonatomic, retain) AppSettings *appSettings; 

Und ich Ich empfehle, Ihre AppSettings als Singleton-Klasse zu machen.

+0

Hallo, vielen Dank für die Beantwortung. Ich habe es versucht, aber es löst das Problem nicht. – Sinan

+0

Versuchen Sie dann, den 'viewDidLoad'-Inhalt in' init' oder 'loadView' zu verschieben. PS. Nochmal. Machen Sie AppSetting als Singleton. Es wird Arbeit sein :) – demon9733

0

Wenn Sie sagen, dass Sie den View-Controller in AppDelegate initialisieren, nehme ich an, dass Sie meinen MyViewController * theView = [[MyViewController alloc] init]; oder etwas ähnliches. Das wird Ihre erste Ansicht sein und Sie sollten AppSettings in viewDidLoad von MyViewController initialisieren, nicht das AppDelegate.

demon9733 Vorschlag in Bezug auf die Erstellung von AppSettings ein Singleton ist ein guter, da Sie in der Lage, leicht auf Ihre Einstellungen von überall in der App zugreifen können.

Überprüfen Sie auch, ob ARC für MyViewController verwendet wird (oder was auch immer es sein könnte)