0

私は2つのビューコントローラー(AとBなど)を持っています... Aにいくつかのレコードがあり、コアデータのデータを編集したい....そのために、ナビゲーションコントローラーをBにプッシュします..そこでデータを編集しますコアデータで..正常に動作しています..これは私が編集に使用するコードです..

NSManagedObjectContext *managedContext = [self managedObjectContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CamImage" inManagedObjectContext:managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];

    // Set the predicate -- much like a WHERE statement in a SQL database
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", xapp.patientName];
    [request setPredicate:predicate];

    // Set the sorting -- mandatory, even if you're fetching a single record/object
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    sortDescriptors = nil;
    NSError *error;
    // Request the data -- NOTE, this assumes only one match, that
    // yourIdentifyingQualifier is unique. It just grabs the first object in the array.
    CamImage *event = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

    [event setMedicineImage:butImage];
    [event setMedicineName:text.text];
    [event setQuantity:[jst objectAtIndex:0]];
    [event setUnit:[jst objectAtIndex:1]];
    [event setMeal:meal];
     request = nil;

    NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:request1
                                                                                    error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
    }

    // Set self's events array to the mutable array, then clean up.
    [self setCamImage:mutableFetchResults];
    NSLog(@"AddMedicineArray:%@",camImage);
    [self.navigationController popViewControllerAnimated:YES];
}

上記のコードでは、データを編集してもう一度フェッチしました..データが適切に編集されていることがわかります..編集後、Bにポップします.viewwillappearメソッドで、もう一度データをフェッチします..しかし、古いレコードが見つかりますのみ...アプリを再度実行すると、編集されたデータが適切に取得されていることがわかりました..ここにビューのコードが表示されます

-(void)viewWillAppear:(BOOL)animated{

    camImage=Nil;
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CamImage" inManagedObjectContext:self.managedObjectContext];
    [request setReturnsObjectsAsFaults:NO];
    [request setEntity:entity];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
    }

    // Set self's events array to the mutable array, then clean up.
    [self setCamImage:mutableFetchResults];
4

1 に答える 1

0

viewWillAppear親ビューは常にビュー階層にあるため、呼び出されていません。代わりに、navigationController:willShowViewController:animated:この質問を参照してください: iOS 5 viewWillAppear not being called when popping a NavigationController

于 2013-03-18T17:43:06.467 に答える