2017-03-11 1 views
0

J'ai un problème avec la sauvegarde et le chargement des données dans UITableView. Après avoir appuyé sur le bouton 2, je ne trouve pas les données que j'ai sauvegardées (peut-être que je ne l'ai pas sauvegardé).enregistrer et charger des données dans UItableview

fichier My.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> 
{ 
    NSMutableArray * arrayIdea; 
    NSMutableArray * arrayEdit; 

    IBOutlet UITableViewCell * cell; 

} 
@property(nonatomic,strong)IBOutlet UITextField * txtField; 
@property(nonatomic,strong)IBOutlet UITableView * tabel1; 
-(IBAction)button2:(id)sender; 
-(IBAction)button1:(id)sender; 
@end 

Mon fichier .m:

#import "ViewController.h" 

@interface ViewController()<UITextFieldDelegate> 

@end 

@implementation ViewController 
-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [textField resignFirstResponder]; 
    return YES; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 

    arrayIdea = [[NSMutableArray alloc] init]; 
} 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (arrayIdea.count > 0) { 
     return arrayIdea.count; 

    } 
    return 0; 
} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"]; 
     if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell1"]; 

    } 
    cell.textLabel.text =[NSString stringWithFormat:@"%@", arrayIdea[indexPath.row]]; 

    return cell; 
} 


-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(nonnull NSIndexPath *)indexPath 
{ 
    if(editingStyle == UITableViewCellEditingStyleDelete) { 
     [arrayIdea removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation: UITableViewRowAnimationFade]; 
    } 
} 
-(IBAction)button1:(id)sender;{ 

    [arrayIdea addObject:self.txtField.text]; 
    [self.tabel1 reloadData]; 
    self.txtField.text = @""; 
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:arrayIdea forKey:@"savedstring"]; 
    [defaults synchronize]; 
} 


-(IBAction)button2:(id)sender;{ 
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults]; 
    cell.textLabel.text =[defaults objectForKey:@"savedstring"]; 
} 

@end 
+0

J'ai essayé votre code et il semble que le code est à s'écraser cette ligne 'cell.textLabel.text = [par défaut objectForKey: @ "savedstring"];', puisque vous enregistrez un tableau et essayez d'assigner le tableau dans un champ de texte. Au lieu de cela, essayez de revenir au tableau et de l'assigner dans le champ de texte. J'espère que cela aide. –

Répondre

0

Vous devez encoder/décoder votre tableau pour pouvoir enregistrer/récupérer dans NSUserDefaults.

Enregistrer

NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject: arrayIdea]; 
[[NSUserDefaults standardUserDefaults] setObject:dataSave forKey:@"savedstring"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Lire

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedstring"]; 
NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
+0

Merci d'avoir répondu à ma question! J'ai essayé, mais il dit "Utiliser l'identificateur non déclaré" currentDefault ", donc je me demande où je peux le définir. – TonyChen

+0

Vérifiez maintenant, currentDefault n'est rien d'autre qu'un objet NSUserDefault. Je pensais que vous allez comprendre par vous-même. – Pawan

+0

Okay! Je vous remercie! – TonyChen

0
In cellForRowAtIndexpath, If you write code like below. 

cell.textlabel.text = [[defaults objectForKey:@"saved string"] objectAtIndex:indexPath.row]; 

instead of passing array. 
In numberOfRowsInSection you can pass 

[[defalts objectForKey:@"saved string"] count]; 

You already called table reload method, so there is no need of button 2. 
Please try. 
0

Vous pouvez enregistrer et récupérer comme ça ..

Enregistrer

[[NSUserDefaults standardUserDefaults]setObject:arrayIdea forKey:@"savedstring"]; 

et récupérer

[[NSUserDefaults standardUserDefaults] objectForKey:@"savedstring"];