2017-12-27 24 views
0
중포 기지

에 다음과 같은 데이터 아이템을 삭제하십시오 "-Kabn1954"지점에서나는 중포 기지에

Before Deletion (Link)

, 나는 항목 "사과"를 삭제합니다. 나는이 작업을 수행 한 후, 중포 기지 데이터는 다음과 같습니다, 그러나

self.ref.child("-Kabn1954").child("foods").child("1").removeValue() 

:

After Deletion (Link)

스위프트를 사용하여, 나는이를 사용하여, 특정 지점에서 특정 인덱스에있는 항목을 삭제 보시다시피,이 분기의 데이터는 이제 인덱스 0에서 인덱스 2로 직접 이동합니다. 이러한 이유로 인해 오류가 발생합니다. 색인 1의 항목이 삭제 될 때 남은 두 항목의 색인이 0이고 색인이 1 인 것과 같이 어떻게 만들 수 있습니까?

+0

[이러한 경우는 배열보다 개체 사용이 선호되는 이유입니다.] (https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html). 나는 그것이 신속의 적용 여부 (객체)인지 어떤 생각을 가지고 있겠지,하지만 당신은 [동기화 배열]이 자원 (https://firebase.googleblog.com/2014/05/handling-synchronized-arrays-with-를 확인하실 수 있습니다 real.html). –

+0

NoSQL 데이터베이스에서 배열을 사용하지 마십시오. [어레이 악 (https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html) 및 (https://stackoverflow.com/를 [이것]과 같은 응답을 확인 질문/43,191,862 # 43,179,477분의 43,191,862/인 로이드 중포 기지 변화 - 레이아웃의 아이 - 데이터 정보)와 [이 하나 (https://stackoverflow.com/questions/45785134/create-firebase-database- 규칙에 키 이름/45804389 # 45804389). 일반적으로 childByAutoId를 사용하여 키를 만들고 해당 부모 노드 내에 key : value 쌍을 저장합니다. 그것은 편집 가능하고 쿼리 가능하며 훨씬 쉽게 지원합니다. – Jay

답변

0

Firebase는 actually store the data as an array이 아니며, 관찰하는 동안 색인에 의해 입력 된 객체로 저장합니다. 가이드는 배열과 같은 동작이 사용되지 않도록 데이터를 재구성해야한다고 제안합니다.

이것이 가능하지 않거나 실제로 바람직하지 않은 경우 Swift API가 작동하는 방식에 대해 알지 못합니다. 그러나 Python 및 JavaScript 라이브러리에서 부모 foods 요소를 관찰하면 배열이 생성됩니다. splice와 update를 할 수있는 객체. Swift에서도 도 반환 할 수있는 API indicates으로이 사실을 짐작할 수 있습니다.

블로그 게시물에 언급 된대로 Firebase가 자동으로 수행하지 않기 때문에 다시 배열하려는 경우 전체 배열을 업데이트해야합니다. foods 레퍼런스를 호출 할 수 setValue()accepts anNSArray. 여기서 경쟁 조건에주의하십시오. 업데이트를 잃지 않도록 단일 트랜잭션에 읽고 쓰기를 캡슐화해야합니다.