豆弁コレクションの機能パッケージ

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];
}