вы не должны проверять селекторы. Представьте себе ключ с именем entity
или managedObjectContext
. Класс NSManagedObject определенно отвечает на эти селекторы, но самое лучшее, что случится, если вы попытаетесь назначить что-то неправильное, это то, что ваш код мгновенно падает. Немного меньше удачи и что-то вроде этого уничтожает весь файл основных данных и все пользовательские данные.
NSEntityDescription
имеет метод с именем attributesByName
, который возвращает словарь с именами ваших атрибутов и соответствующими NSAttributeDescriptions
. Таким образом, эти ключи в основном все атрибуты, которые вы можете использовать
Примерно так должно работать:
Appointment *appointmentObject = [NSEntityDescription insertNewObjectForEntityForName:@"Appointments" inManagedObjectContext:[[DataManager sharedInstance] managedObjectContext]];
NSArray *availableKeys = [[appointmentObject.entity attributesByName] allKeys];
for (id key in dict) {
if ([availableKeys containsObject:key]) {
// Check if the key exists here before setting the value so we don't error out.
[appointmentObject setValue:[dict objectForKey:key] forKey:key];
}
}