failed to call designated initializer on nsmanagedobject class을 어떻게 해결해야 할까요..

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • jsj7878
      참가자
      • 글작성 : 1
      • 답글작성 : 1

      안녕하세요 이번에 Coredata를 사용하여 앱을 만들고 있는 학생입니다.

      다름이 아니라 제가 Coredata를 사용하여 정보를 저장하고 그 정보들을 배열형태로 사용하고 싶은데요

      제가 Card라는 entitiy를 만들었고 여러개의 Card를 저장한 후 저장된 모든 Card들을 배열로 사용하고 싶어서

      class HomeViewController: UIViewController {   

         var allCards = Card

         func …(함수를 통해 Card를 모두 불러와서 allCards에 저장합니다.)

         func ***(Card의 갯수(count)를 세어 tableview를 구성)

      }

      이런 형태로 만들던중에 작동은 잘 되지만 

      ” failed to call designated initializer on nsmanagedobject class ‘Card’ “라는 에러가 발생하더군요

      찾아보니 var allCards = Card를 var allCards : [Card]?로 바꾸면 해결된다고 하지만

      제가 Card의 count를 사용해야되다보니 optional 문제에 걸려서 아래의 함수를 사용하기 어렵습니다.. 

      init을 사용하자니 Card자료형이 아니라 [Card]형태라 init을 쓰기도 애매한거 같고.. 좋은 해결방안이 있을까요??

    • TTOzzi
      참가자
      • 글작성 : 10
      • 답글작성 : 13

      음.. 해당 에러와 옵셔널처리는 관련이 없는 것 같은데..
      어딘가에서 Card 인스턴스를 생성할 때 NSManagedObject 의 이니셜라이저를 호출하지 않고 다른 방식으로 생성해서 에러가 나온 것 같아요.
      NSManagedObjectIf you instantiate a managed object directly, you must call the designated initializer init(entity:insertInto:). 이런 문구가 있네요.

      만약 옵셔널로 바꾸기만 하면 된다면 count 를 사용하기 전에 옵셔널 바인딩을 해주거나 (allCards.count ?? 0) 와 같이 옵셔널이 아닐 때의 값을 지정해주면 어떨까요?

      • 이 답변은 TTOzzi에 의해 3 years, 8 months 전에 수정됐습니다.
    • jsj7878
      참가자
      • 글작성 : 1
      • 답글작성 : 1

      올리신 글보고 떠올라서 수정하다보니 답장이 늦었습니다 ㅠㅜ

      다른 함수에서 이니셜라이저를 사용하지 않고 호출 했었는데 그걸 발견 못해서 그만..

      많은 도움이 되었습니다!! 감사합니다!!

2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom