2016-08-18 78 views
1

我正在使用Mantle作爲模型框架。我有一個如下模式:如何使用YapDatabase更新數據庫記錄

Season.h 
@interface Season : MTLModel <MTLJSONSerializing> 

@property (nonatomic, copy) NSNumber *seasonID; 
@property (nonatomic, strong) NSArray *episodes; 

Season.m 
+ (NSDictionary *)JSONKeyPathsByPropertyKey { 
    return @{ 
      @"seasonID": @"id", 
      @"episodes": @"episodes" 
      }; 
} 

Episode.h 

@interface Episode : MTLModel <MTLJSONSerializing> 

@property (nonatomic, copy) NSNumber *watched; 

正如你可以看到本賽季有很多情節。所以我使用YapDatabase將季節保存到數據庫:

[[DatabaseUtility sharedUtility].database.newConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction * _Nonnull transaction) { 
      [transaction setObject:season forKey:season.seasonID.stringValue inCollection:kSeason]; 
     } completionBlock:^{ 

     }]; 

情況是我想更新插曲的觀看值。那麼下面的工作?

[[DatabaseUtility sharedUtility].database.newConnection asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction * _Nonnull transaction) { 
      [transaction setObject:episode forKey:episode.episodeID.stringValue inCollection:kEpisode]; 
     } completionBlock:^{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
      }); 
     }]; 

回答

0

首先,您可以嘗試讀取完成塊中的值。並檢查它是否更新。我也認爲YapDatabase在主線程上執行完成塊,所以你不需要dispatch_async(需要仔細檢查這個信息)

當你在交易中有一個新對象時它將被更新!

有一些很棒的機制可以幫助你觀察所有的變化。我正在談論Views, Mappings and Long-live transactions

相關問題