2010-01-04 3 views
0
(void) loadDataFromDisk 
{ 
    NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self pathToDataFile]]; 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 


    _cells = [[unarchiver decodeObjectForKey:@"Board"] retain]; 

    [unarchiver release]; 
    [data release]; 
} 

(void) saveDataToDisk 
{ 
    NSMutableData *data = [NSMutableData alloc]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:_cells forKey:@"Board"]; 

    [archiver finishEncoding]; 

    [data writeToFile:[self pathToDataFile] atomically:YES]; 

    //[array release]; 
    [data release]; 
    //NSMutableData 
} 

(BOOL)gameDataExists 
{ 
    return [[NSFileManager defaultManager] fileExistsAtPath:[self pathToDataFile]]; 
} 

(NSString *)pathToDataFile 
{ 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    return [path stringByAppendingPathComponent: GAME_DAT]; 
} 

le code ci-dessus a travaillé sur simulateur, mais a échoué sur device.it semble être que le fichier ne peut pas être trouvé après i sortie et recharger mon application . Et si je Mettre en oeuvre les pathToDataFile comme ceci:Pourquoi y enregistrer et le code de fichier de chargement fonctionne sur simulateur iphone mais a échoué sur l'appareil

(NSString *)pathToDataFile 
{ 
    NSArray * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
    NSString *docDir = [path objectAtIndex:0]; 
    return [docDir stringByAppendingPathComponent:GAME_DAT]; 
} 

le fichier de sauvegarde et reload a travaillé sur l'appareil, mais la méthode drawRect i mis en œuvre à mon avis, ne peut pas être appelé après j'ai appelé [auto setNeedsDisplay].

chris peut

Répondre

1

Le chemin du faisceau est en lecture seule sur l'appareil, mais en lecture-écriture sur l'émulateur. Sur l'appareil, toute tentative d'écriture échouera donc.

Votre deuxième approche pour utiliser le répertoire de documents devrait résoudre le problème.

Je ne sais pas pourquoi [self setNeedsDisplay] ne fonctionne pas pour vous, mais il est probablement sans rapport avec ce problème.

Il y a une erreur que j'ai remarqué dans votre code:

NSMutableData *data = [NSMutableData alloc]; 

devrait être:

NSMutableData *data = [[NSMutableData alloc] init]; 

Vous devez également libérer l'archiveur à la fin de la méthode saveDataToDisk.

+0

Merci, mais mon problème est que si je change la fonction pathToDataFile, ma vue ne peut pas être affichée correctement, elle ne peut pas fonctionner dans la fonction drawRect que j'écris. – cgha