문제

REST/SOAP/XML-RPC를 기반으로 iPhone 앱을 구축하거나 동적 XML 피드를 단순히 끌어내는 사람들이 궁금합니다. 사용자가 피드를 '새로 고침'할 때 정확히 무엇을 의미합니까?

간단한 방법은 NSMutableArray와 같이 일부 컬렉션을 채우는 것입니다. UI의 위젯을 새로 고칠 수있는 경우 일반적으로 다음과 같은 작업을 수행합니다.

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

이것은 XML 피드를 새로 고치기위한 가장 효율적인 알고리즘 인 것 같습니다. 예를 들어, 트위터 고객을 구축하는 많은 사람들이 기존 피드에 대한 변경 사항을 추가하고 전체 피드를 다시 전체 형태로 내리는 것입니다.

서버 측 데이터 소스와 대화 할 때 어떤 종류의 알고리즘을 사용하고 있습니까?

감사합니다.

도움이 되었습니까?

해결책

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

(면책 조항 : 나는 애플에있는 동안 그 프레임 워크를 많이 썼다 :)

귀하의 질문에 대한 답은 피드가 본질적으로 비효율적이라는 것입니다. 이것을 최소화 할 수 있습니다

  1. HTTP "조건부 GETS"를 사용하므로 서버에서 피드가 변경되지 않으면 작은 304 응답을 되 찾을 수 있습니다. 이것은 서버와 당신을 위해 시간을 절약합니다. (Slashdot과 같은 일부 피드 서버는 조건부를 사용하지 않으면 금지합니다!)

  2. 응답의 "최종 수정 :"날짜를 확인하십시오. 예, 조건부 GET을 사용하더라도. 일부 서버는 제대로 처리하지 않습니다. 날짜가 변경되지 않으면 피드를 무시하십시오.

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

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

  5. 피드 자체의 최상위 모드 날짜를 확인하십시오 (이것은 원자와 RSS의 다른 풍미 사이에 다릅니다.) 다시, 지난번과 동일하면 피드를 무시하십시오.

  6. 여기에 도착하면 피드가 업데이트되었을 가능성이 높습니다. 가장 쉬운 일은 오래된 저장된 항목을 모두 버리고 새로운 항목으로 교체하는 것입니다. 그러나 이것은 피드의 끝에서 떨어진 '역사적'항목을 유지할 수 없다는 것을 의미합니다. 그렇게하려면 방금 정당한 피드의 각 항목을 거쳐 영구 저장소의 해당 항목과 일치시키고 새 제품을 기반으로 영구적 인 제품을 업데이트해야합니다. 지속적인 것을 찾을 수 없다면 새 항목으로 추가하십시오. (각 항목에 대한 고유 한 안내서가 포함되지 않은 절름발이 RSS 피드에서는 일치하는 항목이 어려울 수 있습니다. 퍼머 링크와 제목을 비교해보아야합니다. Yuck.)

이 모든 것이 정말로 큰 혼란입니다. 모든 것이 올바르게 행동하고 모든 부러진 피드 및 서버와 함께 일하는 데 많은 노력이 필요했습니다. 내 고통을 활용하고 가능하다면 pubsub를 사용하십시오 :)

다른 팁

한 가지 방법은 배경 스레드에 내장 된 NSXML Pull Parser를 사용하고 스트림의 항목을 메모리에있는 것과 비교하여 변경된 내용 만 업데이트하는 것입니다.

방금 오픈 소스를 발표했습니다 iPhone 용 RSS/Atom Parser 그리고 바라건대 그것은 약간의 사용 일 수 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top