Значением по умолчанию для int
значений в map
является 0
. Итак, когда вы выполняете итерацию по x
и вызываете m[e]++
, расширенная версия будет иметь вид
m[e] = m[e] + 1
Другими словами:
m[e] = 0 + 1
Конечно, если поле повторяется он уже будет на карте (с некоторым значением> 0).
Когда вы проверяете длину карты после цикла, она дает количество уникальных полей в строке.
Есть ли у вас параметры NSMigratePersistentStoresAutomaticallyOption и NSInferMappingModelAutomaticallyOption, заданные при создании вашего persistentStoreCoordinator в приложении Delegate?
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"database.sqlite"]];
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
}
return persistentStoreCoordinator;
}
Если вы получаете только эту ошибку в симуляторе, значит, вы изменили модель данных, и она не удалила файл sqlite, который вы использовали ранее.
Перейдите по адресу: ~/Library/Application Support/iPhone Simulator/User/Applications/
Затем просматривайте папки с именами в формате HEX, пока не увидите свое приложение. Откройте каталог Documents
и удалите файл sqlite. Ошибка должна исчезнуть.
Удаление и переустановка приложения в симуляторе и устройстве работало для меня.
У меня была та же проблема, и она использовалась для работы, пока я не скопировал код в другую папку в Finder и не начал редактировать этот проект, начав получать ошибку. Что исправило, так это то, что у моего другого проекта был координатор магазина с именем xyz.sqlite, у «нового» проекта, над которым я работал, было то же имя, и пришлось изменить его на xyzv2.sqlite (что-то подобное). Нашел ответ здесь: http://www.iphonedevsdk.com/forum/iphone-sdk-development/27268-nspersistentstorecoordinator-has-no-persistent-stores.html