豆弁コレクションの機能パッケージ
4140 ワード
1.アクティビティが格納されているかどうかを判断します(使用時には最も1つの属性で戻り値を保存し、後で操作しやすい) //
+ (BOOL)isActivityInPlist:(Activity *)activity;
1.ファイルを逆アーカイブする2.その後配列が空であるか否かを判断する、空であればNO 3を返す.その後配列を巡り,要素があるか否かを判断し,YESがあればNOを返さなかった.
+ (BOOL)isActivityInPlist:(Activity *)activity{
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
// ,
NSArray *actArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
if (actArr == nil) {
return NO;
} else {
for (Activity *temp in actArr) {
if ([temp.activityId isEqualToString:activity.activityId]) {
return YES;
}
}
return NO;
}
}
self.isSave = [SaveTool isActivityInPlist:self.activity];
// button
if (self.isSave) {
[button setTitle:@" " forState:UIControlStateNormal];
} else {
[button setTitle:@" " forState:UIControlStateNormal];
}
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.title = self.activity.title;
NSLog(@"%@", self.activity.activityId);
2.ファイリング:元のデータが上書きされないようにするため、データを逆ファイリングし、データを読み出した後、新しいデータを加えてファイリングを行うのが一般的です
2つのケース:1.配列が空の場合は、配列2を初期化する必要がある.読み出した配列に要素を追加し、アーカイブします。
+ (void)saveActivityInPlist:(Activity *)activity{
// , , , ,
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
// , , ,
if (arr == nil) {
arr = [NSMutableArray array];
}
// else,
[arr addObject:activity];
//
[NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}
1つの関数をカプセル化し、コレクションとコレクションの取り消し機能を実現する(関数にステータスを伝え、コレクションかコレクションの取り消しかを判断する機能が必要)
1.ステータスがNOの場合、アーカイブコレクション2.そうでなければ、コレクションをキャンセルします。エレメントを検索して削除し、アーカイブする必要があります
+ (void)saveActivityOrCancel:(Activity *)activity state:(BOOL)state{
//
if (state == NO) {
//
[SaveTool saveActivityInPlist:activity];
} else {
// ,
//
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
//
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
//
// ,
for (Activity *temp in arr) {
if ([temp.activityId isEqualToString:activity.activityId]) {
[arr removeObject:temp];
break;
}
}
[NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}
}
[SaveTool saveActivityOrCancel:self.activity state:self.isSave];
if (self.isSave) {
[button setTitle:@" " forState:UIControlStateNormal];
} else {
[button setTitle:@" " forState:UIControlStateNormal];
}
//
self.isSave = !self.isSave;
コレクションの詳細を検索(パラメータを渡す必要がない配列を返します) + (NSMutableArray *)searchAcitivityInPlist{
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
return arr;
}
データをリフレッシュし、データをリアルタイムで更新する必要があるので、viewWillAppearにメソッドを書きます
// ,
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// ,cell
self.arr = [SaveTool searchAcitivityInPlist];
[self.tableView reloadData];
}
//
+ (BOOL)isActivityInPlist:(Activity *)activity;
+ (BOOL)isActivityInPlist:(Activity *)activity{
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
// ,
NSArray *actArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
if (actArr == nil) {
return NO;
} else {
for (Activity *temp in actArr) {
if ([temp.activityId isEqualToString:activity.activityId]) {
return YES;
}
}
return NO;
}
}
self.isSave = [SaveTool isActivityInPlist:self.activity];
// button
if (self.isSave) {
[button setTitle:@" " forState:UIControlStateNormal];
} else {
[button setTitle:@" " forState:UIControlStateNormal];
}
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.title = self.activity.title;
NSLog(@"%@", self.activity.activityId);
2つのケース:1.配列が空の場合は、配列2を初期化する必要がある.読み出した配列に要素を追加し、アーカイブします。
+ (void)saveActivityInPlist:(Activity *)activity{
// , , , ,
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
// , , ,
if (arr == nil) {
arr = [NSMutableArray array];
}
// else,
[arr addObject:activity];
//
[NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}
1つの関数をカプセル化し、コレクションとコレクションの取り消し機能を実現する(関数にステータスを伝え、コレクションかコレクションの取り消しかを判断する機能が必要)
1.ステータスがNOの場合、アーカイブコレクション2.そうでなければ、コレクションをキャンセルします。エレメントを検索して削除し、アーカイブする必要があります
+ (void)saveActivityOrCancel:(Activity *)activity state:(BOOL)state{
//
if (state == NO) {
//
[SaveTool saveActivityInPlist:activity];
} else {
// ,
//
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
//
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
//
// ,
for (Activity *temp in arr) {
if ([temp.activityId isEqualToString:activity.activityId]) {
[arr removeObject:temp];
break;
}
}
[NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}
}
[SaveTool saveActivityOrCancel:self.activity state:self.isSave];
if (self.isSave) {
[button setTitle:@" " forState:UIControlStateNormal];
} else {
[button setTitle:@" " forState:UIControlStateNormal];
}
//
self.isSave = !self.isSave;
コレクションの詳細を検索(パラメータを渡す必要がない配列を返します) + (NSMutableArray *)searchAcitivityInPlist{
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
return arr;
}
データをリフレッシュし、データをリアルタイムで更新する必要があるので、viewWillAppearにメソッドを書きます
// ,
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// ,cell
self.arr = [SaveTool searchAcitivityInPlist];
[self.tableView reloadData];
}
+ (void)saveActivityOrCancel:(Activity *)activity state:(BOOL)state{
//
if (state == NO) {
//
[SaveTool saveActivityInPlist:activity];
} else {
// ,
//
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
//
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
//
// ,
for (Activity *temp in arr) {
if ([temp.activityId isEqualToString:activity.activityId]) {
[arr removeObject:temp];
break;
}
}
[NSKeyedArchiver archiveRootObject:arr toFile:docPath];
}
}
[SaveTool saveActivityOrCancel:self.activity state:self.isSave];
if (self.isSave) {
[button setTitle:@" " forState:UIControlStateNormal];
} else {
[button setTitle:@" " forState:UIControlStateNormal];
}
//
self.isSave = !self.isSave;
+ (NSMutableArray *)searchAcitivityInPlist{
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES) lastObject];
NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
return arr;
}
データをリフレッシュし、データをリアルタイムで更新する必要があるので、viewWillAppearにメソッドを書きます
// ,
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// ,cell
self.arr = [SaveTool searchAcitivityInPlist];
[self.tableView reloadData];
}