Bonsoir à tous,
Je suis en trains de développer une petite app Iphone qui utilise différente view…
En cherchant un moyen de pouvoir lire/modifier des variables (BOOL et NSString, NSDictionary) depuis tout mes controller, j’ai choisi de créer une classe singleton (qui n’est instanciée qu’une fois dans l’appli (depuis mon AppDelegate)).
J’ai pas de soucis particulier a récupérer la valeur de mes BOOL dans mes différents controller (je les ai pas tous essayé), mais parcontre j’ai un plantage de l’appli qd je veux récupérer la valeur d’un NSString….(pas encore essayé les dictionnaires).
Voilà un digest de ma classe singleton : (j’y laisse qu’nun BOOL et un NSString pour pas surcharger)

AppData.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import <Foundation/Foundation.h>
 
 
@interface AppData : NSObject {    
    BOOL User_txt_file_available;
    NSString *pathToTxtFile;
}
 
@property (nonatomic, assign) BOOL User_txt_file_available;
@property (nonatomic, retain) NSString *pathToTxtFile;
 
+ (AppData *)sharedAppData;
 
- (void)checkpresentfiles;
@end
et voilà mon AppData.m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#import "AppData.h"
 
 
@implementation AppData
 
@synthesize User_txt_file_available, pathToTxtFile;
 
 
static AppData *sharedAppDataManager = nil;
 
-(id)init {
    if (self = [super init]) {
        // Init points to 0
        [self checkpresentfiles];     //perform inits. of variables
        points = 0;
    }
    return self;
}
 
-(void)dealloc {
    // Do things
    [ super dealloc ];
}
 
////////////////////
// Singleton Methods
+ (AppData*)sharedAppData
{
    if (sharedAppDataManager == nil) {
        sharedAppDataManager = [[super allocWithZone:NULL] init];
    }
    return sharedAppDataManager;
}
 
+ (id)allocWithZone:(NSZone *)zone {
    return [[self sharedAppData] retain];
}
 
- (id)copyWithZone:(NSZone *)zone {
    return self;
}
 
- (id)retain {
    return self;
}
 
- (NSUInteger)retainCount {
    return NSUIntegerMax;  //denotes an object that cannot be released
}
 
- (void)release {
    //do nothing
    [ethnic_freq_dic_available_dictionary release];
}
 
- (id)autorelease {
    return self;
}
 
 
- (void)checkpresentfiles{
 
    NSInteger count,i; //variable for loops
    NSBundle * mainBundle = [NSBundle mainBundle];
    NSFileManager *filemgr = [NSFileManager defaultManager];
    NSArray *path= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentfolder = [path objectAtIndex:0];
    NSArray *filelist;
 
    filelist = [filemgr contentsOfDirectoryAtPath:documentfolder error:nil]; //init with files of the document folder
 
    //check for genomics txt file
    NSString *searched_segment = @"xxxxx_";
    NSDirectoryEnumerator *dirEnum = [filemgr enumeratorAtPath:documentfolder];
    NSString *file;
    User_txt_file_available = NO;
    while (file = [dirEnum nextObject]) {
        if ([[file pathExtension] isEqualToString: @"txt"]) {
            // process the document
            NSRange range = [file rangeOfString:searched_segment];
            if (!(range.length ==0)) {
                User_txt_file_available = TRUE;
                pathToTxtFile = [documentfolder stringByAppendingPathComponent:[filelist objectAtIndex:i]];
            }
        }
    }
} // preform file checks necessary for all project classes
 
@end
Mon problème :

Qd j’essaye de lire le contenu d’une NSString de ma classe singleton avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
NSLog(@"%@"[AppData sharedAppData]. pathToTxtFile)
j’obtiens l’erreur suivante : *** -[NSPathStore2 release]: message sent to deallocated instance 0x4e17510

J’ai parcouru quelques blogs et forums…mais je sèche tjours ! Avec un message d’erreur j’ai bien l’idée que c’est problème avec la manière dont mes NSStrings sont instanciées..mais je ne sais pas le résoudre…
Est ce que ça inspire quelqu’un ?

Ah! et tant qu'a faire: dans les différents codes que j'ai vu utilisant une classe singleton, on utilise un NSString...pourquoi pas un NSMutablestring si on veux écrire dedans depuis une autre classe ?

Merci d'avance pour votre aide!