#define NAME_KEY @"name"
#define INGR_KEY @"ingredients"
#define DIRE_KEY @"directions"
@interface AddDrinkViewController : DrinkDetailViewController {
NSMutableArray *drinkArray;
}
@property (nonatomic,retain) NSMutableArray *drinkArray;
#import "DrinkConstants.h"
@implementation AddDrinkViewController
@synthesize drinkArray;
- (IBAction) save: (id)sender{
// 사용자가 입력한 정보를 새롭게 칵테일 정보 딕셔너리를 생성합니다.
NSMutableDictionary* newDrink = [[NSMutableDictionary alloc] init];
[newDrink setValue:nameTextField.text forKey:NAME_KEY];
[newDrink setValue:ingredientsTextView.text forKey:INGR_KEY];
[newDrink setValue:directionsTextView.text forKey:DIRE_KEY];
// 이 딕셔너리를 칵테일 배열이 담긴 배열에 추가합니다.
[drinkArray addObject:newDrink];
[newDrink release];
// 데이터를 정렬합니다.
// 칵테일 이름을 기준으로 정렬
// selector는 별도로 지정하지 않으면 대소문자 구분해 비교를 합니다. 여기서는 대소문자 구분하지 않습니다.
NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:NAME_KEY ascending:YES selector:@selector(caseInsensitiveCompare:)];
[drinkArray sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];
[nameSorter release];
// 칵테일 추가 뷰를 제거
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
[drinkArray release];
[super dealloc];
}
리소스 폴더에 위와 같은 DrinkDirections.plist 를 만들어 놔야 합니다.
- (void)viewDidLoad {
[super viewDidLoad];
// 앱 종료 이벤트를 노티피케이션 센터에 등록합니다.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
// 배열을 구현하고 데이터를 채워 넣습니다.
//NSMutableArray* tmpArray = [[NSMutableArray alloc] initWithObjects:@"Firecracker",@"Lemon Drop",@"Mojito",nil];
//self.drinks = tmpArray;
//[tmpArray release];
NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
self.drinks = tmpArray;
[tmpArray release];
self.navigationItem.rightBarButtonItem = self.addButtonItem;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void) applicationWillTerminate:(NSNotification *) notification {
// 리스트의 목록을 파일로 저장합니다.
// 이 코드는 시물레이터에서만 사용가능합니다. 디바이스 데이터 저장은 나중에 다뤄보겠습니다.
NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"];
[self.drinks writeToFile:path atomically:YES];
}
- (void)viewDidUnload {
// 노티피케이션 등록 해지
[[NSNotificationCenter defaultCenter] removeObserver:self];
}