Я не уверен, что запрос на выборку выдаст ошибку, если отсутствует объект с идентификатором.Вы можете рассмотреть возможность использования счетчика объекта.Поэтому, заменив
//Excecute the request
item = [[context executeFetchRequest:request error:&error] lastObject];
на
NSInteger countForFetchRequest = [context countForFetchRequest:fetchRequest error:&error];
Если countForFetchRequest равно нулю, то вы можете вставить объект (объект с заданным значениемid) как новый объект.