Meine Anwendung verfügt über einen UITableViewController, der eine Liste von Zellen enthält, die Namen von Städten darstellen. Wenn ein Benutzer auf eine Zelle klickt, ändert die Anwendung die Zelle accessoryType in UITableViewCellAccessoryCheckmark und speichert den Textwert der Zelle (Name der Stadt) im permanenten Speicher. Ich habe jedoch festgestellt, dass jedes Mal, wenn ich auf die Zelle klicke, mindestens 10 Sekunden benötigt werden, um die Daten tatsächlich im Persistent Store zu speichern. Irgendeine Idee, warum das passiert? Anstatt die Daten sofort zu speichern, warum dauert es so lange, bis sie bestehen bleiben?NSManagedContext dauert sehr lange, um persistent zu bleiben
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cityName = [self.citySettingModel nameOfCityAtIndex:indexPath.row OfCountryAtIndex:self.countryIndex];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
[[self.citySettingModel worldbikesCoreService] removeCity:cityName];
}
else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[[self.citySettingModel worldbikesCoreService] addCity:cityName toCountry:self.countryName];
}
}
Der Code für eine Stadt zu schaffen und Land-Objekte sind in einer anderen Klasse
- (City *) addCity:(NSString*) cityName toCountry:(NSString*) countryName
{
NSManagedObjectContext *context = [self.delegate managedObjectContext];
Country *country = [self.countryDAO addCountry:countryName inManagedObjectContext:context];
City *city = [self.cityDAO addCity:cityName inManagedObjectContext:context];
[country addCitiesObject:city];
return city;
}
- (City*) addCity:(NSString*) cityName inManagedObjectContext:(NSManagedObjectContext *)context
{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"City"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"cityName = %@", cityName];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"cityName" ascending:YES];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error;
NSArray *matches = [context executeFetchRequest:fetchRequest error:&error];
if (error) NSLog(@"error when retrieving city entities %@", error);
City *city;
if (!matches || [matches count] > 1) ;
else if ([matches count] == 0) {
city = [NSEntityDescription insertNewObjectForEntityForName:@"City" inManagedObjectContext:context];
city.cityName = cityName;
}
else city = [matches lastObject];
return city;
}
Erstens: wo speichern Sie den Kontext in den Code oben? Ich sehe keine Rettung hier. Zweitens: Denkst du nicht, dass deine Anfrage in addCity: ... für diese 10 Sekunden verantwortlich sein könnte ...? – codeclash