2016-03-22 2 views
0

NSManagedObjectの最初のレコードを更新したいとします。ここで私がここに持っているのは、のを使ってそれらをすべて選択して更新しているためです。しかし、最初のレコードを更新するにはどうすればよいですか?NSManagedObjectの最初のオブジェクトのみを更新する

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
NSError *errorLoading = nil; 
self.users = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 
for (NSManagedObject *usersObject in [self users]) 
{ 
    [usersObject setValue:@"*" forKey:@"currentUser"]; 
} 
NSError *error; 
[context save:&error3]; 
} 

答えて

1

このようなの種類:すべての

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
fetchRequest.fetchLimit = 1; //Fetch only one object (optional) 

NSError *errorLoading = nil; 
NSManagedObject *user = [[context executeFetchRequest:fetchRequestNext error:& errorLoading] firstObject]; 
if (errorLoading) { 
    //handle error 
} 
[user setValue:@"*" forKey:@"currentUser"]; 
NSError *error = nil; 
if (![context save:&error]) { 
    //handle error 
} 

まずあなたが1つのオブジェクトのみが必要な場合は、あなたがfetchLimitそれが必要とされていない1に設定することができ、それはほんの少しの最適化だ(それ最初のオブジェクトをフェッチした後にCoreDataを停止させる)。次に、通常どおりにリクエストを実行し、結果の配列から最初のオブジェクトを取得します。

あなたは、単にインデックス1つを選択した結果(配列)から
+0

パーフェクト。 fetchLimitは私の新しいものです。感謝万円。 – RGriffiths

+0

@RichardGriffiths、よろしいですか? :) – FreeNickname

2

:0

NSArray *results = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 

if (results.count>0) { 
    NSManagedObject *userObject = results[0]; 
    [usersObject setValue:@"*" forKey:@"currentUser"]; 
} 
NSError *saveError = nil; 
[context save:&saveError]; 

を私はこれが

0

別のオプションは、firstObjectはNSArrayの中で定義されたメソッドを使用することであるのに役立ちます願っています。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Users"]; 
NSError *errorLoading = nil; 
NSArray *users = [context executeFetchRequest:fetchRequestNext error:& errorLoading]; 

NSManagedObject *singleUser = [users firstObject]; 
if(singleUser){ 
    [singleUser setValue:@"*" forKey:@"currentUser"]; 
} 

NSError *error; 
if([context save:&error]){ 

} 
関連する問題