scris la plist, dar este gol când am renunțat la simulare

Bună am pus în aplicare acest obiect PlistManager pentru a scrie/citit plist în proiectul meu.Problema este că plist este populat bine se va executa (sper) și atunci când intră în fundal (am folosit notificare și NSlog [Plistmanager readPlist: @ "Database" ]) Încă mai pot citi datele introduse anterior.

Punctul este atunci când am opri simularea pe xcode și alerg din nou plist este acum gol. De ce?

@interface ReadWritePlist : NSObject
+(void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic;
+ (NSMutableDictionary *)readPlist:(NSString*)filePlist;

@end

@implementation ReadWritePlist


+ (void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    [dic writeToFile:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",filePlist]] atomically:YES];

}


+ (NSMutableDictionary *)readPlist:(NSString*)filePlist {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [[documentsDirectory stringByAppendingPathComponent:filePlist] stringByAppendingPathExtension:@"plist"];
    NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

    return dic;
}

rezolvat

Tocmai am găsit aceste metode noi pentru citirea/scrierea plist și este working.I a trebuit să adăugați metoda "initializeFileDic" în interiorul appdelegate (didFinishLaunchingWithOptions):

@implementation PlistManager

+ (NSMutableDictionary *)readPlist:(NSString*)filePlist {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [[documentsDirectory stringByAppendingPathComponent:filePlist] stringByAppendingPathExtension:@"plist"];
NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

return dic;
}




+ (void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

    if ([dic writeToFile:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",filePlist]] atomically:YES]) {
    NSLog(@"Ok done!");
    } 
    else{
            NSLog(@"Noo not done!");
    }
} 

+ (void)initializeFileDic:(NSString*)FileNameExt
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *startPath = [[path stringByAppendingPathComponent:FileNameExt]stringByAppendingPathExtension:@"plist"] ;
    NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [[documentsDirectoryPath stringByAppendingPathComponent:FileNameExt]stringByAppendingPathExtension:@"plist"];

    NSLog(@"%@ \n,\n %@ ",startPath,filePath);
    if([NSDictionary dictionaryWithContentsOfFile: startPath]){
    NSLog(@"File %@ exists",filePath);
    }
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        if([[NSDictionary dictionaryWithContentsOfFile:startPath] writeToFile:filePath atomically:NO])
        NSLog(@"File copied inside App DocumentsDirectory\n\n");
    else
        NSLog(@"Error while trying to copy into DocumentsDirectory\n\n"); 
    }

}


@end

Ar putea cineva să explice ce sa întâmplat greșit? Mulțumiri

0
pozitiv .. pentru ce mă întrebi?
adăugat autor luca, sursa
Știați că NSDictionary este metoda writeToFile returnează un rezultat de succes? Verificați dacă este DA sau NU. De asemenea, ce tipuri de lucruri țineți în evidență în dicționar? Sunt oricare dintre obiectele Obiectiv C personalizate?
adăugat autor Michael Dautermann, sursa
folosiți ARC?
adăugat autor CarlJ, sursa

1 răspunsuri

Când efectuați apelul pentru a salva datele în plist? Dacă renunțați la aplicația dvs. din Xcode, aceasta este terminată imediat și nu trece prin niciuna dintre metodele de delegare a aplicației legate de terminarea sau introducerea în fundal, unde suspectez codul dvs.

Apăsarea butonului de pornire de pe simulator este modul în care aceste metode se execută.

0
adăugat