IOS - CoreData 增刪改查


#pragma mark - Core Data Methods

- (void)insertObjectWithFileName:(NSString *)fileName

{

    /**

     SQL新增記錄的過程

     1. 拼接一個INSERTSQL語句

     2. 執行SQL

     */

    // 1. 實例化並讓context“准備將一條個人記錄增加到數據庫

    ReaderDocument *document = [NSEntityDescription insertNewObjectForEntityForName:kOAPDFDocument inManagedObjectContext:self.managedObjectContext];

    

    // 2. 設置個人信息

    document.fileName = fileName;

    

    // 3. 保存(context保存當前的修改)

    if ([self.managedObjectContext save:nil]) {

        NSLog(@"新增成功");

    } else {

        NSLog(@"新增失敗");

    }

}

 

- (NSMutableArray *)getObjectsWithPredicate:(NSString *)predicate

{

    // 1. 實例化一個查詢(Fetch)請求

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

    

    // 3. 條件查詢,通過謂詞來實現的

    //    request.predicate = [NSPredicate predicateWithFormat:@"age < 60 && name LIKE '*'"];

    // 在謂詞中CONTAINS類似於數據庫的 LIKE '%%'

    //    request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"];

    // 如果要通過key path查詢字段,需要使用%K

    //    request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"];

    // 直接查詢字表中的條件

    

    // 2. _context執行查詢數據

    NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];

    

//    for (OAPDFDocument *pdf in array) {

//        NSLog(@"\nfielName:%@ \nfilePath:%@ \nfileSize:%@", pdf.fileName, pdf.filePath, pdf.fileSize);

        

        // CoreData中,查詢是懶加載的

        // CoreData本身的SQL查詢中,是不使用JOIN的,不需要外鍵

        // 這種方式的優點是:內存占用相對較小,但是磁盤讀寫的頻率會較高

//        for (Book *b in p.books) {

//            NSLog(@"%@ %@ %@", b.name, b.price, b.author);

//        }

//    }

    

    //    for (Book *b in array) {

    //        NSLog(@"%@ %@ %@", b.name, b.price, b.author);

    //    }

    return [NSMutableArray arrayWithArray:array];

}

 

- (void)editObjectsWithPredicate:(NSPredicate *)predicate withState:(NSNumber *)state

{

    // 1. 實例化一個查詢(Fetch)請求

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

    

    // 2. 條件查詢,通過謂詞來實現的

    request.predicate = predicate;

    // 在謂詞中CONTAINS類似於數據庫的 LIKE '%%'

    //    request.predicate = [NSPredicate predicateWithFormat:@"phoneNo CONTAINS '1'"];

    // 如果要通過key path查詢字段,需要使用%K

    //    request.predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '1'", @"phoneNo"];

    // 直接查詢字表中的條件

    

    // 3. _context執行查詢數據

    NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];

    for (ReaderDocument *pdf in array) {

        // 3.1修改公文閱讀狀態

        pdf.fileTag = state;

        

        // 3.2修改公文最新打開日期

        NSFileManager* fileMngr = [NSFileManager defaultManager];

        NSDictionary* attributes = [fileMngr attributesOfItemAtPath:pdf.fileURL error:nil];

        pdf.lastOpen = (NSDate *)[attributes objectForKey:NSFileModificationDate];

        

        // 3.3獲取並保存,該文件的首頁縮略圖

        UIImage *thumbImage = [pdf imageFromPDFWithDocumentRef:pdf.fileURL];

        pdf.thumbImage = UIImagePNGRepresentation(thumbImage);

        

        [self.collectionView reloadData];

        break;

    }

    // 4. 通知_context修改數據是否成功

    if ([self.managedObjectContext save:nil]) {

        NSLog(@"修改成功");

    } else {

        NSLog(@"修改失敗");

    }

}

 

- (void)removeObjectsWithPredicate:(NSString *)predicate

{

    // 1. 實例化查詢請求

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:kOAPDFDocument];

    

    // 2. 設置謂詞條件

//    request.predicate = [NSPredicate predicateWithFormat:@"name = '張老頭'"];

    request.predicate = [NSPredicate predicateWithFormat:predicate];

    

    // 3. 由上下文查詢數據

    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:nil];

    

    // 4. 輸出結果

    for (ReaderDocument *pdf in result) {

        // 刪除一條記錄

        [self.managedObjectContext deleteObject:pdf];

        

        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:pdf.filePath];

        if (fileExists) {

            [self removeFileWithName:pdf.fileName];

        }else{

            NSLog(@"File:%@ is not exist!",pdf.fileName);

        }

//        break;

    }

    

    // 5. 通知_context保存數據

    if ([self.managedObjectContext save:nil]) {

        NSLog(@"刪除%lu文件成功",(unsigned long)[result count]);

    } else {

        NSLog(@"刪除失敗");

    }

}

 

- (void)removeFileWithName:(NSString *)fileName

{

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    

    NSString *filePath = [documentsPath stringByAppendingPathComponent:fileName];

    NSError *error;

    BOOL success = [fileManager removeItemAtPath:filePath error:&error];

    if (success) {

        NSLog(@"Remove fiel:%@ Success!",fileName);

    }

    else

    {

        NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);

    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM