2012-04-11 2 views
3

RestKit을 처음 사용했습니다. 엔티티 Space와 User 사이에 다 대다 관계를 매핑하려고합니다. 이 질문의 목적을 위해 모든 공간 객체가 이미 핵심 데이터 저장소에 있다고 가정합니다.코어 데이터가있는 다 대다 RestKit : 작동하지만 제대로하고 있습니까?

REST API에서 주어진 공간에 대해 모든 사용자를 불러 오기 위해 한 번의 호출을 할 수 있습니다. 내 네트워크 가져 오는 클래스를 초기화 할 때 우선, 나는 사용자의 목록 구문 분석에 대한 매핑 적절한을 설정 : 공간에 대한 사용자의 링크를 채우기 위해, 그리고

RKManagedObjectMapping *teamMapping = [RKManagedObjectMapping mappingForEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:self.manager.objectStore.primaryManagedObjectContext] inManagedObjectStore:self.manager.objectStore]; 

[teamMapping mapKeyPath:@"id" toAttribute:@"userID"]; 
[teamMapping mapKeyPath:@"name" toAttribute:@"name"]; 
teamMapping.primaryKeyAttribute = @"userID"; 
[self.manager.mappingProvider setMapping:teamMapping forKeyPath:@"users.user"]; 

을, 나는이 작업을 수행 :

NSArray *spaces = [self.managedObjectContext executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Space"] error:nil]; 

for (QBSpace *space in spaces) 
{ 
    [self.manager loadObjectsAtResourcePath:[NSString stringWithFormat:@"space/%@/users", space.wikiName] usingBlock:^(RKObjectLoader *loader) { 
     loader.onDidLoadObjects = ^(NSArray *objects){ 
      space.team = nil; 
      for (QBUser *user in objects) 
      { 
       [space addTeamObject:user]; 
      } 

     }; 
    }]; 
} 

즉, 반환 된 개체 배열을 기반으로 space-> user 링크를 수동으로 추가합니다.

올바른 방법일까요? 그것은 잘 작동하는 것,하지만 난 RestKit 것들을 자동으로하고 관련 트릭을 놓치고있어 걱정입니다.

<users type="array"> 
<user> 
<id>aPrimaryKey</id> 
<login>loginName</login> 
<login_name warning="deprecated">loginName</login_name> 
<name>Real Name</name> 
</user> 

그래서 내가 링크 노력하고있어 공간을 나타 내기 위해 반환 된 파일에 아무것도 같은

는 해당 파일에 대한 반환 된 XML 보이는 : 나는 전달 된 URL에있는 I 요청했지만 반환 된 문서에는 아무 것도 없으므로이 블록 기반 솔루션을 생각해 냈습니다.

모든 RestKit 사용자에게이 방법은 다 대다 링크를 형성하는 데 적합한 방법입니까?

답변

1

작동하는 경우 문제가되지 않습니까?

공간 사용자 정의 ManagedObject가 있다고 생각할 수 있습니다. RKObjectLoaderDelegate에 응답하십시오. 당신이 응답을 얻을 때

그런 다음, 당신은 objectLoader:didLoadObject:(id)object 또는 objectLoader:didLoadObjectDictionary: 방법 내에서 loadAtResourcePath를 실행할 수 있습니다.

또한 Space 클래스가 User의 대표자에게 응답하도록 만들 수 있으며 그 시점에서 공간 클래스에 연결할 수 있습니다.

더 좋을 수도 있지만 달성하려는 대상에 따라 달라질 수 있습니다. 어쨌든 생각을위한 음식. :)

+0

모델 개체가 웹 서비스 요청을 트리거하도록 할 수 있습니까? MVC에 위배되는 것 같습니다. 확실히 생각할 사람. 핵심 데이터와 다 - 대 - 다 관계를 처리하는 RestKit 문서에 대한 예제 또는 링크를 알고 있습니까? –

+0

나는 당신이 무슨 뜻인지 안다. 웹 서비스 작업을하면서 GetSpace와 같은 클래스로 시작했지만, 처음부터 끝까지 작업했을 때 웹 서비스 물건이 내가 다루고있는 데이터의 슈퍼 클래스에 더 잘 앉았다. 그래서 수퍼 클래스 인 BasePostData로 끝났습니다. 그런 다음 클래스와 관련하여 뭔가 특별한 작업을하고 있다면 (예를 들어 관계에 링크하는 것과 같이) 서브 클래스에서 할 수 있습니다. 나는 이것이 의미가 있기를 바랍니다. –

+0

코어 데이터와 다 - 대 - 다 관계를 처리하는 RestKit 문서에 대한 예제 또는 링크를 알고 있습니까? - 하나의 JSON 요청에서 이들 사이의 매핑을 의미한다고 가정합니다. 아니요. 어떻게해야하는지 모르겠습니다. 그것은 별도의 요청으로하는 경우, 나는 당신이 코드에서 그들을 연결할 수있을 것 같아요 ...하지만 미안 아무 예도. –