2010-07-02 110 views
0

我已经创建了一个地址簿应用程序。我的AddressController.h类是---存储地址簿记录

@interface AddressController : NSObject { 
    IBOutlet id nameField; 
    IBOutlet id addressField; 
    IBOutlet id tableView; 
    NSMutableArray *records; 
} 
- (IBAction)addRecord:(id)sender; 
- (IBAction)deleteRecord:(id)sender; 
- (IBAction)insertRecord:(id)sender; 

@end 

Implementation class is as follow:- 


@implementation AddressController 

- (id)init 
{ 
    records = [[NSMutableArray alloc] init]; 
    return self; 
} 


- (NSDictionary *)createRecord 
{ 
    NSMutableDictionary *record = [[NSMutableDictionary alloc] init]; 
    [record setObject:[nameField stringValue] forKey:@"Name"]; 
    [record setObject:[addressField stringValue] forKey:@"Address"]; 
    [record autorelease]; 
    return record; 
} 

- (IBAction)addRecord:(id)sender 
{ 
    [records addObject:[self createRecord]]; 
    [tableView reloadData]; 
} 

- (IBAction)deleteRecord:(id)sender 
{ 
    int status; 
    NSEnumerator *enumerator; 
    NSNumber *index; 
    NSMutableArray *tempArray; 
    id tempObject; 
    if ([tableView numberOfSelectedRows] == 0) 
     return; 
    NSBeep(); 
    status = NSRunAlertPanel(@"Warning!", @"Are you sure that you want to delete the selected record(s)?", @"OK", @"Cancel", nil); 
    if (status == NSAlertDefaultReturn) 
    { 
     enumerator = [tableView selectedRowEnumerator]; //enumerator here gets indexes of selected rows 
     tempArray = [NSMutableArray array]; 
     while ((index = [enumerator nextObject])) 
     { 
      tempObject = [records objectAtIndex:[index intValue]]; // we store selected rows in temporary array 
      [tempArray addObject:tempObject]; 
     } 
     [records removeObjectsInArray:tempArray]; // we delete records from 'records' array which are present in temporary array 
     [tableView reloadData];   
    } 
} 

- (IBAction)insertRecord:(id)sender 
{ 
    int index = [tableView selectedRow]; 
    [records insertObject:[self createRecord] atIndex:index]; 
    [tableView reloadData]; 
} 

- (int)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    return [records count]; 
} 

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex 
{ 
    id theRecord, theValue; 
    theRecord = [records objectAtIndex:rowIndex]; 
    theValue = [theRecord objectForKey:[aTableColumn identifier]]; 
    return theValue; 
} 


- (void)awakeFromNib 
{ 
    [tableView reloadData]; 
} 

@end 

我可以在地址簿中添加和删除记录。但是当我再次启动应用程序时,所有记录都消失了。我想将记录存储在某处(如用户默认值),以便当我再次启动应用程序时,现有记录将显示在地址簿中。 我不明白如何使用用户默认设置。 请建议解决方案。

回答

0

请勿为此使用用户默认设置。你可能想要探索核心数据。另一个探索的选择是NSCoding。

NSCoding将具有较少的学习曲线,实现相当简单。核心数据更难掌握,但从长远来看,这将是更明智的选择。