Question

Je tente d'archiver un objet dans un fichier plist et le charger plus tard pour remplir un tableView. Il semble que le fichier est archivé correctement mais je reçois un mauvais accès en essayant d'obtenir la valeur sur le fichier.

Ai-je fait quelque chose de mal?

est où je l'enregistre

// Create some phonebook entries and store in array
NSMutableArray *book = [[NSMutableArray alloc] init];
Phonebook *chris = [[Phonebook alloc] init];
chris.name = @"Christian Sandrini";
chris.phone = @"1234567";
chris.mail = @"christian.sandrini@example.com";
[book addObject:chris];
[chris release];

Phonebook *sacha = [[Phonebook alloc] init];
sacha.name = @"Sacha Dubois";
sacha.phone = @"079 777 777";
sacha.mail = @"info@yzx.com";
[book addObject:sacha];
[sacha  release];

Phonebook *steve = [[Phonebook alloc] init];
steve.name = @"Steve Solinger";
steve.phone = @"079 123 456";
steve.mail = @"steve.solinger@wuhu.com";
[book addObject:steve];
[steve release];

[NSKeyedArchiver archiveRootObject:book toFile:@"phonebook.plist"];

Et là, j'essaie de le faire sortir du fichier et de l'enregistrer de nouveau dans un tableau

- (void)viewDidLoad {
    // Load Phone Book
    NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:@"phonebook.plist"];

    self.list = arr;

    [arr release];
    [super viewDidLoad];
}

La partie où je tente de construire une cellule

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *PhoneBookCellIdentifier = @"PhoneBookCellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PhoneBookCellIdentifier];

    if ( cell == nil )
    {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:PhoneBookCellIdentifier] autorelease];
    }

    NSUInteger row = [indexPath row];
    Phonebook *book = [self.list objectAtIndex:row];
    cell.textLabel.text = book.name;   
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

    return cell;
}

Ici, l'erreur mauvaise d'accès

  

Langue actuelle: auto; actuellement   C-objectif Assertion a échoué: (CCRS),   fonction getName, fichier   /SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm,   ligne 3990. Assertion a échoué: (CCRS),   fonction getName, fichier   /SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm,   ligne 3990. Assertion a échoué: (CCRS),   fonction getName, fichier   /SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm,   ligne 3990. Assertion a échoué: (CCRS),   fonction getName, fichier   /SourceCache/objc4_Sim/objc4-427.5/runtime/objc-runtime-new.mm,   ligne 3990.

Était-ce utile?

La solution

Juste pour développer qu'une fraction: unarchiveObjectWithFile renvoie un pointeur autoreleased. Vous ne retain localement si vous ne devriez pas release. Parce que vous le faites, l'objet est ensuite libérée et au moment où vous venez de l'utiliser en appelant book.name, ce n'est pas là.

(je suppose que la propriété est self.list conservant de manière appropriée afin que l'objet sera maintenu aussi longtemps que vous ne relâchez pas ici. Sinon, vous devez corriger aussi.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top