2013-06-08 4 views
0

다음 while 문은 최대 한 번 실행 한 후에 종료하지 않아야합니까? 문맥 디스크로 플러시되지 않은 변경 내용을 가지고있는 동안왜 무한 루프가 발생합니까? while ([managedObjectContext hasChanges]) [managedObjectContext processPendingChanges]

while ([self.managedObjectContext hasChanges]) 
    [self.managedObjectContext processPendingChanges]; 
+0

한 번만 실행하려면'while '대신'if()'를 사용할 수 있습니다. –

+0

알지만 중요한 점은 보류중인 변경 사항을 처리하려고한다는 것입니다. 위의 코드는'-processPendingChanges'가 실제로 내가 원하는 것을 수행 하는지를 보는 것이다. 이 경우'-hasChanges'는 거짓이됩니다. 그러나 불행히도,이 테스트는 내가 무슨 일이 일어나고 있는지 정말로 이해하지 못한다는 것을 지적한다 : ( – markjs

답변

0

hasChanges 사실이 남아있다. 찾고자하는 것이 save:이고, processPendingChanges으로 전화를 걸고 컨텍스트의 변경 내용을 디스크에 쓰고 컨텍스트의 변경된 상태를 변경합니다.

+0

아, 그건 이해가된다. -processPendingChanges가 제대로 작동 하는지를 알 수있는 어떤 방법? – markjs

+0

"hasChanges"는 KVO 가능합니다. – CodaFi

+0

어떻게 이것을 사용할 수 있을지 잘 모르겠습니다. 내 자신을 설명하는 새로운 질문을 올렸습니다. 실제 문제는 http://stackoverflow.com/questions/16997558/observing-changes-in-the-properties-of-an-nsmanagedobject-how-to-avoid-looping에서 좀 더 정교합니다. – markjs

관련 문제