2015-09-26 52 views
0

我想使用按鈕將數據存儲到NSArray中,然後檢索它以顯示在表中。但是,按下按鈕後,表格仍爲空。我認爲這個問題可能與Car對象被添加到數組然後存儲在NSData中有關。NSArray - 使用按鈕存儲和檢索表的數據

CarTableViewController.h

#import <UIKit/UIKit.h> 
#import "CarDetailViewController.h" 
#import "Car.h" 

@interface CarListTableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> 

@property Car *selectedCar; 
@property NSMutableArray *listOfCars; 
@property (strong, nonatomic) IBOutlet UITableView *carTableView; 
@end 

CarTableViewController.m

#import "CarListTableViewController.h" 
#import "CarEntryViewController.h" 

@implementation CarListTableViewController 
@synthesize selectedCar, listOfCars, carTableView; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    carTableView.delegate = self; 
    carTableView.dataSource = self; 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return listOfCars.count; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"carCell" forIndexPath:indexPath]; 

    if (cell == nil) { 

     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"carCell"]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
     cell.textLabel.numberOfLines = 0; 

    } 
    Car *tempCar =[listOfCars objectAtIndex:indexPath.row]; 
    cell.textLabel.text =tempCar.make; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:true]; 
    selectedCar = [listOfCars objectAtIndex:indexPath.row]; 
    [self performSegueWithIdentifier:@"viewDetailsSegue" sender:nil]; 
} 

#pragma mark - Navigation 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    CarDetailViewController* vc = [segue destinationViewController]; 
    vc.carObject = selectedCar; 
} 

- (NSArray*) retrieveDataFromNSUserDefaults { 
    NSMutableArray *objectArray = [NSMutableArray new]; 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"]; 
    if (dataRepresentingSavedArray != nil) { 
     NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray]; 
     if (oldSavedArray != nil) 
      objectArray = [[NSMutableArray alloc] 
          initWithArray:oldSavedArray]; 
     else 
      objectArray = [[NSMutableArray alloc] init]; 
    } 
    return objectArray; 
} 

- (void)storeDataInNSUserDefaults:(Car *)carToStore { 
    NSMutableArray *objectArray = [NSMutableArray arrayWithArray:[self retrieveDataFromNSUserDefaults]]; 
    [objectArray addObject:carToStore]; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:objectArray] forKey:@"savedArray"]; 
} 

@end 
+1

僅供參考 - 'NSUserDefaults'不是存儲數據的地方。 – rmaddy

回答

2

你的代碼看起來好像沒什麼問題,但我認爲你是不是調用的方法添加數據[self storeDataInNSUserDefaults:car]任何地方。

相關問題