Je tente de charger deux singletons de style standard: http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html lorsque mon application iPhone est chargée. Voici mon code:Chargement de 2 singletons avec dépendances lorsqu'une application est ouverte (appDelegate/appDidBecomeActive) iPhone SDK
- (void) applicationDidFinishLaunching:(UIApplication *)application {
// first, restore user prefs
[AppState loadState];
// then, initialize the camera
[[CameraModule sharedCameraModule] initCamera];
}
Mon "module de caméra" a un code qui vérifie une propriété du singleton AppState. Mais je pense que ce qui se passe est une condition de concurrence où le module de caméra singleton tente d'accéder à la propriété AppState alors qu'il est en train d'être initialisé (donc la propriété est nulle, et il réinitialise AppState). J'aimerais vraiment les séparer, au lieu de simplement en lancer un (ou les deux) dans le délégué de l'application. Est-ce que quelqu'un d'autre a vu quelque chose comme ça? Quel genre de solution de contournement avez-vous utilisé, ou que suggéreriez-vous?
Merci d'avance!
est ici la méthode loadState:
+ (void)loadState {
@synchronized([AppState class]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *file = [documentsDirectory stringByAppendingPathComponent:@"prefs.archive"];
Boolean saveFileExists = [[NSFileManager defaultManager] fileExistsAtPath:file];
if(saveFileExists) {
sharedAppState = [[NSKeyedUnarchiver unarchiveObjectWithFile:file] retain];
} else {
[AppState sharedAppState];
}
}
}
La ligne qui appelle AppState à CameraModule:
- (void)initCamera {
...
if([AppState sharedAppState].captureSession != nil) {
...
}
}
A quoi ressemble votre code 'loadState'? À moins que vous ne travailliez intentionnellement sur des threads d'arrière-plan, cette méthode ne sera pas retournée tant qu'elle ne sera pas terminée. – kubi
Salut, merci pour l'aide - Je viens d'ajouter la méthode loadState à la question. – taber
Qu'est ce que 'sharedAppState'? Pouvez-vous poster le code à partir de CameraModule où vous accédez à la propriété 'Appstate'? – kubi