2012-03-12 3 views
0

저는 iPhone dev 및 Objective-C에 대해 정말 새로운 (약 2 일)이라고 말함으로써 시작하겠습니다. 구문, 메모리 관리 등에 익숙해졌습니다.간단한 RestKit 콜백 인터페이스를 구현하는 방법은 무엇입니까?

RestKit을 사용하여 JSON REST 요청을 허용하는 서버와 상호 작용하려고합니다. GET 요청을 실행 한 후에 나는 형태의 데이터를 얻을 :

GET : /api/beast/1/ 
{ 
    'species' : 'elephant', 
    'resource_uri' : 'api/beasts/1/', 
    'owner' : '/api/beastmaster/3/', 
    'name' : 'Stampy' 
} 


GET : /api/beastmaster/3/ 
{ 
    'resource_uri' : '/api/beastmaster/3/' 
    'first_name' : 'Bart', 
    'last_name' : 'Simpson' 
} 

건은 beast 객체의 owner 속성이 실제 전체 JSON 표현으로, 때로는 때로는 자원 URI 문자열로 채워 때문이다 객체의로는 다음과 같습니다 : 내가 원하는 무엇

{ 
    'species' : 'elephant', 
    'resource_uri' : 'api/beasts/1/', 
    'owner' :  { 
     'resource_uri' : '/api/beastmaster/3/' 
     'first_name' : 'Bart', 
     'last_name' : 'Simpson' 
    }, 
    'name' : 'Stampy' 
} 

, 그것은 여부를 확인해야 비동기 적으로 owner 속성을 요청할 수있는 사용하기 쉬운 인터페이스를 제공하는 것입니다 객체의 전체 표현을 이미 가지고 있으며,이 경우 즉시 콜백을 실행하거나 그렇지 않은 경우 적절한 GET 요청을 실행하고 응답이 도착하면 콜백을 실행합니다. 이 자바 스크립트 인 경우

, 몇 가지 방법이있을 수 있습니다 달성하기 위해 : 나는 요청을 실행하는 동일한 개체에 대한 응답을 처리 할 수있는 프로토콜을 구현 본 적이

//Alternative 1 
beast.getOwner(function(owner){ 
    console.log("Owner is: " + owner); 
}); 

//Alternative 2 
beast.get("owner", { 
    'success' : function(){...}, 
    'error' : function(){...} 
}); 

대부분의 RestKit 예를. 이 경우에는 하나의 클래스가 다양한 관련 객체 속성 (비동기 적으로 얻어 질 것임)을 요구할 수 있기 때문에 나는 이것을 좋아하지 않는다.

모델 클래스를 사용하여 나머지 응용 프로그램을 개발할 다른 프로그래머에게 간단하고 명확한 인터페이스를 제공하여 원하는 동작을 얻는 가장 좋은 방법은 무엇입니까? 어쩌면 블록을 사용하고 있을까요?

답변

0

JSON 응답에서 볼 수있는 한 디자인 불규칙성이 있습니다. 1-2 시간의 여분의 연구와 1-2 시간의 여분의 코딩만으로도 충분할 정도로 복잡해 보입니다. 제 빠른 해결책은 owner : "uri" 또는 owner : { ownerObjectProperty: value }과 같은 일관된 값을 갖도록 모델 뷰를 변경하는 것입니다.

느린 솔루션은 매핑 된 개체에 2 개의 값을 가질 수 있습니다. 첫 번째 것은 NSString *rawValueForOwner이고, 두 번째는 OwnerObject* ownerObject입니다.

프로토콜을 통해 owner JSON 값을 rawValueForOwner 매핑 된 개체로 매핑합니다. 값을 파싱하고 "{"으로 시작하면 공제하고 나머지는 rawValueForOwner을 RestKit 수동 파싱 메서드를 통해 개체로 구문 분석합니다. "{"으로 시작하지 않으면 RESTful 서버를 다시 호출하여 객체를 가져온 다음 beastowner을 서로 수동으로 연결하십시오.

나는 높은 방법 : 내가 설명한대로 정확히 아니다

이 링크 개체로 JSON 문자열을 구문 분석하는 방법을 포함 ... Deserializing local NSString of JSON into objects via RestKit (no network download)

+0

을 촬영 한 것입니다. 주어진 URL은 항상 json을 동일한 형식으로 반환합니다. 단 한 단계 깊숙이 간다는 것입니다. 그래서 'beastmaster'가'좋아하는 것 '속성을 가지고 있다면 말입니다. 그런 다음 '짐승'의 ​​표현은 '소유자'를 URI로 표시합니다. 그러나 최상위 객체가 '짐승'이라면,'owner' 속성은 완전한 json 객체가 될 것입니다. 이것은 json에서 무한 순환 참조를 피하기위한 것입니다.BTW, 링크 덕분에 도움이 될 것입니다. –