setterを使用して、Realmオブジェクトのプロパティが更新されていても成功していない場合、呼び出しコードでRealmトランザクションを使用する必要性を排除しようとしています。 someInt用セッターでRealmオブジェクトのSetterが呼び出されない
@interface Caller : RLMObject
@property (strong, nonatomic) NSString * _Nullable name;
@property (strong, nonatomic) NSString * _Nullable number;
@property (assign, nonatomic) int someInt;
@end
以下のとおり:今、私は新しいオブジェクトを作成し、someIntを設定している場合
@implementation Caller
- (instancetype) init
{
self = [super init];
return self;
}
- (void)setSomeInt: (int) newValue
{
RLMRealm *realm = [self realm];
if (realm)
{
[realm beginWriteTransaction];
}
_someInt = newValue;
if (realm)
{
[realm commitWriteTransaction];
}
}
その後、setSomeIntが取得する例えば
は、私は、次のレルムのクラスを持っていると仮定します
Caller* caller = [[Caller alloc] init];
caller.someInt = 8;
ファインですが、呼び出し元オブジェクトが保存されてレルムaに保存されている場合NDその後、someInt
が再び変更され、その後、次のエラーが発生します。
「RLMException」、理由:「 書き込みトランザクションの外でオブジェクトを変更しようとする - 最初RLMRealmインスタンス上beginWriteTransactionを呼び出します」
しかし、これはセッターのポイントを防ぐためにしようとしている正確に何である - 必要に応じてトランザクションを作成しますが、レルム・エラーがsetSomeInt
が、この場合に呼ばなっている「前に発生」しています。オブジェクトがRealmに格納されているときにセッターが呼び出されないのはなぜですか?それより前に呼び出されています。メソッドを使用してプロパティを明示的に設定する必要はありません。