fault
, который вы видите в журнале, не указывает на ошибку, но означает, что управляемый объект не полностью загружен в память, а вместо этого представлен объектом сбоя . Это нормальное поведение. Когда вы пытаетесь получить доступ или изменить атрибут объекта, полный объект будет "поврежден" или будет считан в память. Это вводящая в заблуждение терминология баз данных старой моды, восходящая к 1960-м годам.
Ваш код не сохраняет никаких объектов. Изменения в управляемых объектах в памяти не будут сохраняться до тех пор, пока вы не вызовете save
в контексте управляемого объекта.
Вы также не хотите использовать изменяемую копию, например:
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
… потому что это тратит память и может привести к дублированию управляемых объектов. Был некоторый код в документах Apple, который начал это, но это ошибочно. Вместо этого просто используйте:
NSArray *fetchResults=[managedObjectContext executeFetchRequest:request error:&error];
… который вернет автоматически освобожденный массив управляемых объектов, соответствующих выборке.