1

私は RESTKIT の初心者で、最近 ray のチュートリアルhttp://www.raywenderlich.com/13097/intro-to-restkit-tutorialから Foursquare パブリック API でテストしました。

要点はわかりましたが、わからない部分があり、自分のWebサービスを利用できるようにポインタが欲しいです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    RKURL *baseURL = [RKURL URLWithBaseURLString:@"https://api.Foursquare.com/v2"];
    RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];
    objectManager.client.baseURL = baseURL;

    RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]];
    [venueMapping mapKeyPathsToAttributes:@"name", @"name", nil];
    [objectManager.mappingProvider setMapping:venueMapping forKeyPath:@"response.venues"];

    [self sendRequest];
}

どうすれば変更できますか

[venueMapping mapKeyPathsToAttributes:@"name", @"name", nil];
[objectManager.mappingProvider setMapping:venueMapping forKeyPath:@"response.venues"];

自分の webMethod に対応するには? (私のwebMethodを以下に示します)

現在、テスト目的でファイルを IIS にアップロードし、Web サービスに IP を使用しています。(仕事場は頻繁に変えているので、連絡しやすいようにmyIPAddressに指定しています)

-- 私のサービス コード (変更された編集: JSON を返すようになりました)

    [WebMethod]
    [ScriptMethod( ResponseFormat = ResponseFormat.Json)]
    public void testTextJSON()
    {
        string text = "Testing for Json!";
        List<string> arrayList = new List<string>();
        arrayList.Add(text); 
        JavaScriptSerializer js = new JavaScriptSerializer();
        string name = js.Serialize(arrayList);  
        Context.Response.Write(name); 
    }

戻る -["Testing for Json!"]

編集-現在変更したものとviewDidLoadsendRequest自分のサービスをテストするために

   - (void)viewDidLoad
{
    [super viewDidLoad];

    RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://192.168.1.12"];
    RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];
    objectManager.client.baseURL = baseURL;

    RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[venue class]];
    [venueMapping mapKeyPathsToAttributes:@"name", @"name", nil];


    [self sendRequest];
}

- (void)sendRequest
{

    RKObjectManager *objectManager = [RKObjectManager sharedManager];

    RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/webService/webService1.asmx/testTextJSON"];
    objectManager.acceptMIMEType = RKMIMETypeJSON;
  objectManager.serializationMIMEType = RKMIMETypeJSON;
    [[RKParserRegistry sharedRegistry] setParserClass:[RKJSONParserJSONKit class] forMIMEType:@"text/plain"];

    [objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@", [URL resourcePath]] delegate:self];
}

編集 n+1 - ここに私のエラー メッセージの一部を示します。

2012-11-25 06:49:20.925 fourSquareAPI[352:12e03] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x8354430> valueForUndefinedKey:]: this class is not key value coding-compliant for the key venues.'

私が削除すると、[objectManager.mappingProvider setMapping:venueMapping forKeyPath:@"venues"]; 私は得るでしょう

2012-11-25 06:52:47.495 fourSquareAPI[368:11603] response code: 200
2012-11-25 06:52:47.499 fourSquareAPI[368:12e03] W restkit.object_mapping:RKObjectMapper.m:87 Adding mapping error: Could not find an object mapping for keyPath: ''
2012-11-25 06:52:47.499 fourSquareAPI[368:12e03] E restkit.network:RKObjectLoader.m:231 Encountered errors during mapping: Could not find an object mapping for keyPath: ''
2012-11-25 06:52:47.502 fourSquareAPI[368:11603] Error: Could not find an object mapping for keyPath: ''

誰か私に何をすべきか教えてもらえますか?? RESTKIT を使用して Web サービスを使用する方法を学びたいと思います。

4

1 に答える 1

0

キー パスresponse.venuesは、JSON または XML 形式のサーバー応答に関する属性へのパスです。この場合、サーバーはキー「venues」を持つ「response」を返します。これは、マッピングを適用する場所のリストである可能性が高いです。サーバーの応答に基づいてそれを適応させる必要があります。

マッピングの前に特定の値を処理する場合は、次の関数を使用します。

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData; {
  if([*mappableData valueForKey:@"result"] != nil){
    [*mappableData removeObjectForKey:@"result"]; //This key won't be mapped now
  }
}
于 2012-11-13T03:47:16.237 に答える