0

私のアプリケーションには、都市の名前を表すセルのリストを持つUITableViewControllerがあります。ユーザーがセルをクリックすると、アプリケーションはセルのaccessoryTypeをUITableViewCellAccessoryCheckmarkに変更し、セルのテキスト値(都市名)を永続化されたストアに保存します。ただし、セルをクリックするたびに、データを永続ストアに実際に保存するのに少なくとも10秒かかることがわかりました。なぜこれが起こるのか考えていますか?データをすぐに保存するのではなく、なぜ持続するのにそれほど時間がかかるのですか?

- (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];
    }
}

CityオブジェクトとCountryオブジェクトを作成するためのコードは別のクラスにあります

- (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;
}
4

1 に答える 1