2016-10-06 3 views
1

스위프트 3, 엑스 코드 (8), 영역 2.0.0스위프트 배열 개체는

이 같은라는 목록 속성이있는 영역의 객체가 있습니다

class Entry: Object{ 
    let approaches = List<Approach>() 
    //... 
} 

을 나는 Entry 당겨 이 접근법의 목록이므로 Approach 목록이있는 객체. 그런 다음 Approach 개체를 사용하여 내용을 조작 할 수 있도록 목록과 함께 자체 배열을로드합니다. Entry에 약간의 편집을 절약 할

var approaches = [Approach]() 
for approach in entry.approaches{ 
    approaches.append(approach) 
} 

전에, 나는 기존의 모든 approaches을 제거하고 내 코드에서 다른 곳 approaches 배열에 넣어 새로운 요소들로 대체하길 원한다.

try realm.write { 
    print(approaches) //This prints out my Approach objects 
    realm.delete(entry.approaches) //Clear out existing items in list 
    print(approaches) //-!- This prints [[invalid object], [invalid object]] 
} 

내가 수동으로 자신의 approaches 배열의 영역 객체를 넣어, 왜 entry.approaches가 삭제 될 때이 무효인가?

목록의 모든 개체를 바꾸는 더 좋은 방법이 있나요?

답변

0

의도 된 동작입니다. 어쩌면 당신은 영역에서 객체를 삭제하고 List에서 객체를 제거하는 것을 혼란스럽게 할 수 있습니다. realm.delete()은 전자를 실행합니다. 개체가 영역에서 삭제되었습니다. 그런 다음 객체를 가리키는 모든 참조가 무효화됩니다. 을 지우고 영역에서 삭제하지 않으려면 List.removeAll() 메소드를 사용할 수 있습니다.

try realm.write { 
    entry.approaches.removeAll() 
} 

참고 : 모든 목록 항목을 배열에 복사하는 것은 다음과 같이 작성할 수 있습니다. 목록을 반복 할 필요가 없습니다.

let approaches = [Approach](entry.approaches) 
+0

도움 주셔서 감사합니다. 배열 채우기에 대한 팁이 특히 좋습니다. –