2009-04-29 4 views
0

REST/SOAP/XML-RPC를 기반으로 iPhone 앱을 제작하거나 단순히 동적 XML 피드를 가져 오는 사용자라면 궁금합니다. 정확히 무엇을 의미합니까? 사용자가 피드를 '새로 고침'한다고 말하면 어떻게 되나요?iPhone/Mac OSX에서 XML 피드를 "새로 고침"

직접적인 방법은 피드에서 가져온 것이 무엇이든간에 NSMutableArray와 같은 일부 콜렉션을 채우는 것입니다.

[myMutableArray removeAllObjects]; 
// follow steps to repopulate myMutableArray 

이는 XML 피드를 새로 고침에 대한 가장 효율적인 알고리즘 것 같다 다음 UI에 위젯이 새로 고침 할 수 있으면, 나는 일반적으로 뭔가를 좋아한다. 예를 들어 트위터 클라이언트를 구축하는 많은 사람들이 기존 피드에 변경 사항을 추가하는 반면 전체 피드를 전체 양식으로 다시 가져 오는 경우가 있습니다.

서버 측 데이터 소스와 대화 할 때 모델을 "새로 고치기"위해 사용하는 알고리즘에는 어떤 종류가 있습니까?

감사합니다.

답변

4

OS X 10.5가 필요한 경우 PubSub 프레임 워크를 사용해야합니다. RSS/Atom 피드를 가져오고 업데이트하도록 명시 적으로 설계되었습니다.

(면책 조항 : 나는 애플에있는 동안 :)

질문에 대한 대답은 피드는 본질적으로 비효율적이다 그 프레임 워크를 많이 썼다. 당신은 피드 당신이 그냥 작은 304 응답을 얻을 것이다 서버에서 변경되지 않은, 그래서 만약 "조건부 가져"HTTP를 사용

  1. 하여이를 최소화 할 수 있습니다. 이렇게하면 서버 및 사용자의 시간을 절약 할 수 있습니다. (조건부 가져 오기를 사용하지 않으면 slashdot 같은 일부 피드 서버가 금지됩니다!)

  2. 응답의 "Last-Modified :"날짜를 확인하십시오. 예, 조건부 GET을 사용하더라도 마찬가지입니다. 일부 서버는 올바르게 처리하지 못합니다. 날짜가 변경되지 않은 경우 피드를 무시하십시오.

  3. 응답의 원시 데이터와 마지막 원시 응답을 비교하십시오. 동일하면 피드를 무시하십시오. (일부 서버는 조건부 수신을 지원하지 않거나 마지막으로 수정 한 날짜를 보내지 않습니다.)

  4. 이제 XML을 구문 분석해야합니다.

  5. 피드 자체의 최상위 mod 날짜를 확인하십시오. 이는 Atom과 RSS의 다른 맛 사이에서 다릅니다. 마지막으로 동일한 경우 다시 피드를 무시하십시오.

  6. 여기에 도착하면 피드가 업데이트되었을 가능성이 큽니다. 가장 쉬운 방법은 기존 저장된 항목을 모두 버리고 새로운 항목으로 바꾸는 것입니다. 그러나 이는 피드의 끝에서 벗어난 '역사적인'항목을 보관할 수 없음을 의미합니다. 그렇게하고 싶다면 그냥 구문 분석 된 피드의 각 항목을 거쳐 영구 저장소의 해당 항목과 일치시켜야하며 새 항목을 기반으로 영구 항목을 업데이트해야합니다. 영구적 인 것을 찾을 수 없다면 그것을 새로운 항목으로 추가하십시오. 일치하는 항목은 각 항목마다 고유 한 GUID가 포함되어 있지 않은 불충분 한 RSS 피드에서는 어려울 수 있습니다. 영구 링크와 제목을 비교해 봐야합니다.)

이 모든 것이 실제로 큰 혼란입니다. 모든 것이 올바르게 작동하고 모든 부러진 피드와 서버로 작업하기 위해서는 많은 노력이 필요했습니다. 내 고통을 이용하고 PubSub을 사용하십시오 :)

0

하나의 접근법은 백그라운드 스레드에서 내장 된 NSXML 끌어 오기 구문 분석기를 사용하고 스트림의 항목을 메모리에있는 항목과 비교하여 변경된 내용 만 업데이트하는 것입니다.

+0

NSURLConnection의 비동기 모드를 사용하여 피드를 먼저 가져 오는 경우 배경 스레드가 필요하지 않습니다. XML 구문 분석은 기본 스레드에서 수행 할 수있을만큼 빠릅니다. –

0

오픈 소스 RSS/Atom Parser for iPhone을 방금 출시 했으므로 유용 할 것입니다.

나는 그것에 대해서도 당신의 생각을 듣고 싶습니다!

관련 문제