2015-09-03 14 views
5

nilに属性を設定することは可能ですか?NSBatchUpdateRequestNSBatchUpdateRequestを使用してコアデータ属性をnilに設定する

let unlockRequest = NSBatchUpdateRequest(entityName: "MyEntity") 
unlockRequest.predicate = NSPredicate(format: "self in %@", myObjectIDs) 
unlockRequest.propertiesToUpdate = ["lockDate": NSNull()] 
var error: NSError? 
myContext.executeRequest(unlockRequest, error: &error) 
if let error = error { 
    log.error("Failed to unlock: \(error)") 
} 

は、私はすべてのエラーを得ることはありませんが、それは日付がクリアされない:propertiesToUpdateからNSNull()を渡すと、機能していません。

私もNSExpression(forConstantValue: NSNull())に設定しようとしましたが、どちらも動作しません(forConstantValue引数はオプションの値を受け入れないため、nilに渡すことはできません)。

+0

NSExpression(constantValue:nil)を試しましたか? – Willeke

+0

@Willeke悲しいことに、それはオプションの値を受け入れないので、それを渡すことはできません。 – Sencha

+0

@Senchaこれには解決策がありましたか? – Serluca

答えて

0

これは、Objective-Cで正常に動作するようです:

NSBatchUpdateRequest *batch = [[NSBatchUpdateRequest alloc] initWithEntityName:entityName]; 
NSExpression *value = [NSExpression expressionForConstantValue: nil]; 
batch.propertiesToUpdate = @{@"lockDate": value}; 
batch.resultType = NSUpdatedObjectsCountResultType; 
NSError *error;     
NSBatchUpdateResult *results = [self.privateContext executeRequest:batch error:&error]; 
0

現在のAPIは、一定値としてnilを渡すことができます。

unlockRequest.propertiesToUpdate = ["lockDate": NSExpression(forConstantValue: nil)] 
+0

メソッドシグネチャでスウィフトオプションを使用できるようになりました。これが動作することが確認された場合、それは解決される問題でしょう! 'NSExpression.init(forConstantValue obj:Any?)' –

+0

コンパイラは文句を言っていませんが、リクエストを実行すると例外がスローされます: 'キャッチされていない例外によりアプリケーションを終了しています'、NSInvalidArgumentException '、理由:'無効な文字列キー)が渡されましたpropertiesToUpdate: '' – blwinters

+0

NSBatchUpdateRequest.propertiesToUpdateのヘッダーには次のように書かれています: "式はスカラー値に評価される任意の' NSExpression'になります。 – blwinters

関連する問題