2010-07-02 6 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은 학습 곡선이 적고 구현하기가 쉽습니다. 핵심 데이터는 파악하기가 어렵지만 장기적으로는 현명한 선택입니다.