2017-01-09 4 views
0

Быстрая и новейшая версия iOSосновная информация вставка объекта к существующему объекту

Я создал базовую модель объекта данных с двумя объектами: владельцем и автомобилем.

Собственник может иметь несколько автомобилей, а автомобильный интурн связан только с одним владельцем. Следовательно, я создал от одного до многих автомобилей и обратный для автомобиля.

Так что, если владелец фильтруется, его данные и автомобили могут быть отображены, и если автомобиль будет снят, детали автомобиля и владелец автомобиля могут быть использованы для продолжения.

FYI: владелец уникальна т.е. я сделал имя пользователя уникальным, так что никаких дубликатов владельцев

я создал все правильно и я могу добавить владелец, но у меня есть проблема, добавив машину позже.

Код:

let owner = NSEntityDescription.insertNewObject(forEntityName: "owner", into: objectContext) as? owner 

    owner?.name="Kaushik" 
    owner?.address="address" 
    owner?.mobile=12345789 
    owner?.landline=123456789 
    owner?.userName="KV" 

    do 
    { 
     try objectContext.save() 

    }catch 
    { 
     print("duplicate input") 
    } 


     var filteredOwner = [Any]() 
     var fetchREquest = NSFetchRequest<NSFetchRequestResult>(entityName: "owner") 
     fetchREquest.predicate=NSPredicate(format: "userName == %@","KV") 
     do 
     { 
      filteredLender = try objectContext.fetch(fetchREquest) 

     } catch 
     { 
      print("error") 
     } 

     let kvOwner = filteredLender[0] as? owner 


     let bd = NSEntityDescription.insertNewObject(forEntityName: "car", into: objectContext) as? car 

    car?.make="Audi" 
    car?.number=1234 
    car?.modelname="A4" 
    car?.owner=kvOwner 

    kvOwner?.addToCars(car!) 
    do 
    { 
     try objectContext.save() 

    }catch 
    { 
     print("unable to add car\(error)") 

    } 

Проблема в том, я не в состоянии добавить автомобиль после того, как добавляется владелец. i.e первый владелец добавлен. Затем я снова получаю владельца и затем добавляю автомобиль.

Я намеренно делаю этот способ, чтобы проверить, как это работает, если не указано в первый раз.

Но я получаю сообщение об ошибке «неспособность добавить автомобиль» каждый раз, когда я пытаюсь добавить новый автомобиль.

Может кто-нибудь, пожалуйста, помогите мне с этой проблемой?

Спасибо

+0

Рекомендую прочитать раздел «Необязательное связывание» в [Swift - The Basics] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html) и принять это подход в вашем коде.Тогда будет возможно увидеть, какая из этих переменных (если таковая имеется) равна нулю, что поможет диагностировать проблему. – pbasdf

+0

Здесь ничего нет. Я просто добавляю автомобиль –

ответ

0

Сразу после

let kvOwner = filteredLender[0] as? owner 

Попробуйте это вместо текущего кода:

if let bd = NSEntityDescription.insertNewObject(forEntityName: "car", into: objectContext) as? car { 

    bd.make="Audi" 
    bd.number=1234 
    bd.modelname="A4" 
    bd.owner=kvOwner 

    do { 
    try objectContext.save() 

    } catch { 
     print("unable to add car\(error)") 

    } 

} 
+0

Да, я пробовал..Он входит в цикл for, но все же выдает сообщение об ошибке «Невозможно добавить автомобиль», –

0

так, как я делал был добавлен в Viewdidload этот was..This код (). Следовательно, каждый раз, когда я запускал приложение. Я добавляю владельца, затем я возвращаю владельца и добавляю автомобиль. Причина, по которой я делал это, - это проверить, добавлен ли владелец во второй раз, поскольку владелец уникален. Итак, после первого раза владелец бросает владельца ошибки, и после этого я забираю владельца и пытаюсь добавить автомобиль, который бросает ошибку «Невозможно добавить автомобиль».

Как предложил @Maor Duani, я добавил, если conditon перед добавлением автомобиля, но это не решило проблему. Вместо этого я пытался что-то еще, я добавил условие перед владельцем, чтобы проверить, существует ли уже владелец, как

var filteredLender = [Any]() 
    var fetchREquest = NSFetchRequest<NSFetchRequestResult>(entityName: "Lender") 
    fetchREquest.predicate=NSPredicate(format: "userName == %@","KV") 
    do 
    { 
     filteredLender = try objectContext.fetch(fetchREquest) 

    } catch 
    { 
     print("error") 
    } 
if(filteredLender.count==0) 
{ 
}else 
{ 
} 

Приведенный выше код просто переставляя выборки до добавления владельца. Таким образом, я проверяю, доступен ли владелец, а затем добавьте владельца и автомобиль. Если нет, у меня уже есть получатель. Так что я просто добавляю машину. В конце концов, это сработало хорошо. Кажется, проблема может заключаться в дублировании ввода. Я пытаюсь добавить одного и того же владельца каждый раз, я получаю повторяющуюся ошибку каждый раз, кроме первого, а затем я не могу добавить автомобиль. Когда я удаляю это, он работает нормально. Я не понимаю, почему это происходит. Если бы кто-нибудь мог объяснить эту работу, это было бы полезно. Спасибо

Смежные вопросы