1

我正在使用 Mantle 作为模型框架。我有如下模式:

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

1 回答 1

0

首先,您可以尝试读取完成块中的值。并检查它是否更新。我也认为 YapDatabase 在主线程上执行完成块,所以你不需要dispatch_async(需要仔细检查这个信息)

当您setObject在事务中有一个新对象时,它将被更新!

有一些很棒的机制可以帮助你观察所有的变化。我说的是Views, Mappings 和 Long-live transactions

于 2016-10-04T10:24:52.570 回答