2016-06-19 3 views
8

이전에 신속하게 데이터 모델의 "TestEntity"에 새 데이터를 추가하기 위해 이와 같은 코드를 사용할 수있었습니다.Swift3에서 엔티티에 새 데이터를 삽입하는 방법은 무엇입니까?

NSManagedObject은 내 "TestEntity"생성과 나는이 코드는하지 않는 상황

let entity=NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context) as! TestEntity 
entity.testAttribute="test value" 
context.save() 

을 절약 할 수, 끝 부분에있는 "점"구문

와 그 속성을 설정할 수였다 Swift3에서 일하십시오.

Could not cast value of type 'NSManagedObject_TestEntity_' (0x175306b0) to 'testCoreData.TestEntity' (0xd6bb8). 2016-06-19 11:07:52.305195 testCoreData[689:264453] Could not cast value of type 'NSManagedObject_TestEntity_' (0x175306b0) to 'testCoreData.TestEntity' (0xd6bb8)

사람이이이 swift3에서 수행되어야하는 방법에 대한 몇 가지 빛을하시기 바랍니다 있나 : 나는 그것을 실행하면, 다음과 같은 런타임 오류가? 어떤 도움을 주셔서 감사합니다. 감사합니다.

질문의 두 번째 부분은 데이터에 다시 액세스하는 방법입니다. 다음 코드는 오류로 종료 : 치명적인 오류 : NSArray 요소가 NSManagedObject 서브 클래스가있는 경우 TestEntity 새로운 구문이

let entity = TestEntity(context: context) 
entity.testAttribute="test value" 

답변

4

일치하지 못했습니다

let fr:NSFetchRequest<TestEntity>=TestEntity.fetchRequest() 
    do { 
     let results=try self.moc!.fetch(fr) 
     if results.count==0 { 
      print("no resutls. i need to add something") 
      let newTestEntity=TestEntity(context: self.moc!) 
      newTestEntity.testAtt="testovaci text" 
      do { 
       try self.moc!.save() 
      }catch{ 

      } 
     }else{ 
      print("already some results") 
      for result in results { 
       print(result.testAtt!) 
      } 
     } 
    }catch { 
     print(error) 
    } 

데이터 모델 검사기 TestEntity 클래스 이름을 TestEntity로 설정해야합니다. 이전의 이상한 행동은이 값이 공백으로 인한 것으로 보입니다.

+0

세이브는 'try-catch' 블록으로 래핑되어야합니다. – Mundi

+0

@Mundi 물론 그렇습니다.하지만이 질문에는 부적합합니다. 나는 그 선을 지웠다. – vadian

+0

위의 코드가 작동하도록 NSEntityDescription을 만들어야했습니다. 그것 없이는 또 다른 런타임 오류가 발생했습니다 : 'NSInvalidArgumentException'이라는 캐치되지 않은 예외로 인해 응용 프로그램을 종료했습니다. 이유 : ''NSCntagedDescription '클래스의'testCoreData.TestEntity 'NSManagedObject가 있어야합니다.' (엔터티 엔티티 : entityDes !, insertInto : 컨텍스트) entity.testAtt = "테스트 속성"'그렇다면 엔티티 = NSEntityDescription.entity (forEntityName : "TestEntity", 문맥에서) let entity = TestEntity 고맙습니다. – matyasl

1

작업 예입니다 스위프트 배열 요소 유형을

let fr:NSFetchRequest<TestEntity>=TestEntity.fetchRequest() 

do { 
    let searchResults=try context.fetch(fr) 
    if let results=searchResults { 
     for result in results { 
     print("testAtt = \(result.testAtt)") 
     } 
    } 
} catch { 

} 
3
//retrieve the entity 
let entity = NSEntityDescription.entity(forEntityName: "TestEntity", in: context) 

let testEntity = NSManagedObject(entity: entity!, insertInto: context) 

//set the entity values 
testEntity.setValue(testAtt1, forKey: "testAtt1") 
testEntity.setValue(testAtt2, forKey: "testAtt2") 

//save the object 
do { 
    try context.save() 
    print("saved!") 
} catch let error as NSError { 
    print("Could not save \(error), \(error.userInfo)") 
} catch { 

} 
+0

엔티티 'EntityName'에 대해 'ProjectName.EntityName'이라는 클래스를로드 할 수 없습니다. 클래스를 찾을 수 없습니다. 대신 기본 NSManagedObject를 사용하십시오. – mumu

관련 문제