2016-08-18 10 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(この情報を再確認する必要があります)

あなたがsetObject新しいオブジェクトを更新すると更新されます!

すべての変更を観察するのに役立つ素晴らしいメカニズムがいくつかあります。私はViews, Mappings and Long-live transactionsについて話しています。

関連する問題