存储地址簿记录

时间:2010-07-02 09:32:38

标签: objective-c

我创建了一个地址簿应用程序。我的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

我可以在地址簿中添加和删除记录。但是当我再次启动应用程序时,所有记录都消失了。我想在某处存储记录(比如用户默认值),这样当我再次启动应用程序时,现有记录会显示在地址簿中。 我不知道如何使用用户默认值来做到这一点。 请建议解决方案。

1 个答案:

答案 0 :(得分:0)

请勿使用用户默认值。您可能想要探索核心数据。另一个探索的选择是NSCoding。

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