#pragma mark - Core Data Methods
- (void)insertObjectWithFileName:(NSString *)fileName
{
/**
SQL新增記錄的過程
1. 拼接一個INSERT的SQL語句
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]);
}
}