2012-05-02 17 views
1

LAMP環境とiOS-Appの間で通信するためにRestful Webサービス用のRestKitを使用したいと思います。 したがって、利用可能なチュートリアルやRestKitページに記載されているようにすべて機能するかどうかを調べるための最初のテストを行いました。目的C + RESTKit:オブジェクトの取得に関する問題

今のコードは次のようになります。

@interface Person : NSManagedObject 

@property (nonatomic, retain) NSString * person_firstname; 
@property (nonatomic, retain) NSString * person_lastname; 
@property (nonatomic, retain) NSString * person_gender; 
@property (nonatomic, retain) NSNumber * person_id; 

@end 



そして、これは、サーバー上にダミーコードです:

RKObjectManager* objectManager = [RKObjectManager managerWithBaseURLString:@"http://localhost/resttest"]; 

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 

#ifdef RESTKIT_GENERATE_SEED_DB 
    NSString *seedDatabaseName = nil; 
    NSString *databaseName = RKDefaultSeedDatabaseFileName; 
#else 
    NSString *seedDatabaseName = RKDefaultSeedDatabaseFileName; 
    NSString *databaseName = @"CoreData.sqlite"; 
#endif 

objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:seedDatabaseName managedObjectModel:nil delegate:self]; 

// Map Person Object 
RKManagedObjectMapping *personMapping = [RKManagedObjectMapping mappingForClass:[Person class] inManagedObjectStore:objectManager.objectStore]; 
//RKManagedObjectMapping *personMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Person" inManagedObjectStore:[RKObjectManager sharedManager].objectStore]; 
[personMapping mapKeyPath:@"id" toAttribute:@"person_id"]; 
[personMapping mapKeyPath:@"firstname" toAttribute:@"person_firstname"]; 
[personMapping mapKeyPath:@"lastname" toAttribute:@"person_lastname"]; 
[personMapping mapKeyPath:@"gender" toAttribute:@"person_gender"]; 
personMapping.primaryKeyAttribute = @"id"; 


// Register our mappings with the provider;  
[objectManager.mappingProvider setMapping:personMapping forKeyPath:@"/person"]; 
objectManager.acceptMIMEType = RKMIMETypeJSON; 

#ifdef RESTKIT_GENERATE_SEED_DB 
    RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelInfo); 
    RKLogConfigureByName("RestKit/CoreData", RKLogLevelTrace); 
#endif 

[objectManager loadObjectsAtResourcePath:@"/person" delegate:self]; 



これは私の管理オブジェクトがどのように見えるかですいくつかのjsonの例文字列を返す側:

<?php 

    header('Content-type: application/json'); 

    if($_SERVER['REQUEST_METHOD'] == 'GET') 
    { 
     $json_string = '{ "persons": [ 
          { "id": "1", 
           "firstname": "hans", 
           "lastname": "maier", 
           "genre": "m" 
          }, 
          { "id": "2", 
           "firstname": "michael", 
           "lastname": "schmidt", 
           "genre": "w" 
          }] 
         }'; 

     echo $json_string; 
    } 

?> 


返されるjson-Stringを取得するURIはhttp://localhost/resttest/person(/index.phpです。


私の問題は、次のとおりです。

E restkit.network:RKObjectLoader.m:私は '' のためのリソースパスを定義していないとき

  • 私はいつもこのエラーが出ます: 216マッピング中にエラーが発生しました:keyPathのオブジェクトマッピングが見つかりませんでした: ''

およびなぜこのようなことが起こるのか分かりません。私が試した他の例はこの問題を抱えていませんが、私が間違っていることの手掛かりはありません。

  • これを実行すると(Base URLをhttp://localhost/resttest/personに変更する必要があります)、エラーの代わりに空のオブジェクトが表示されます。



今私は私が間違ってやっているかわからないので、私は、このトピック上の任意の助けをいただければ幸いです。

ありがとうございました!

編集2012年5月3日:

ここで私はログに得るものです:

2012-05-03 12:52:05.067 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMapper.m:320 Performing object mapping sourceObject: { 
    persons =  (
       { 
      firstname = hans; 
      gender = m; 
      id = 1; 
      lastname = maier; 
     }, 
       { 
      firstname = michael; 
      gender = w; 
      id = 2; 
      lastname = schmidt; 
     } 
    ); 
} 
and targetObject: (null) 
2012-05-03 12:52:05.067 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMapper.m:278 Examining keyPath '' for mappable content... 
2012-05-03 12:52:05.067 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMapper.m:264 Found mappable data at keyPath '': { 
    persons =  (
       { 
      firstname = hans; 
      gender = m; 
      id = 1; 
      lastname = maier; 
     }, 
       { 
      firstname = michael; 
      gender = w; 
      id = 2; 
      lastname = schmidt; 
     } 
    ); 
} 
2012-05-03 12:52:05.073 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMapper.m:210 Asked to map source object { 
    persons =  (
       { 
      firstname = hans; 
      gender = m; 
      id = 1; 
      lastname = maier; 
     }, 
       { 
      firstname = michael; 
      gender = w; 
      id = 2; 
      lastname = schmidt; 
     } 
    ); 
} with mapping <RKManagedObjectMapping:0x811eb60 objectClass=Person keyPath mappings => (
    "RKObjectKeyPathMapping: id => person_id", 
    "RKObjectKeyPathMapping: firstname => person_firstname", 
    "RKObjectKeyPathMapping: lastname => person_lastname", 
    "RKObjectKeyPathMapping: gender => person_gender" 
)> 
2012-05-03 12:52:05.074 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMappingOperation.m:617 Starting mapping operation... 
2012-05-03 12:52:05.074 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMappingOperation.m:618 Performing mapping operation: RKObjectMappingOperation for 'Person' object. Mapping values from object { 
    persons =  (
       { 
      firstname = hans; 
      gender = m; 
      id = 1; 
      lastname = maier; 
     }, 
       { 
      firstname = michael; 
      gender = w; 
      id = 2; 
      lastname = schmidt; 
     } 
    ); 
} to object <Person: 0x6e295d0> (entity: Person; id: 0x6e29610 <x-coredata:///Person/t99EFF6DC-EBDA-405C-8AFF-D082E4A8542F2> ; data: { 
    "person_firstname" = nil; 
    "person_gender" = nil; 
    "person_id" = 0; 
    "person_lastname" = nil; 
}) with object mapping <RKManagedObjectMapping:0x811eb60 objectClass=Person keyPath mappings => (
    "RKObjectKeyPathMapping: id => person_id", 
    "RKObjectKeyPathMapping: firstname => person_firstname", 
    "RKObjectKeyPathMapping: lastname => person_lastname", 
    "RKObjectKeyPathMapping: gender => person_gender" 
)> 
2012-05-03 12:52:05.074 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMappingOperation.m:388 Did not find mappable attribute value keyPath 'id' 
2012-05-03 12:52:05.074 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMappingOperation.m:388 Did not find mappable attribute value keyPath 'firstname' 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMappingOperation.m:388 Did not find mappable attribute value keyPath 'lastname' 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] T restkit.object_mapping:RKObjectMappingOperation.m:388 Did not find mappable attribute value keyPath 'gender' 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMappingOperation.m:638 Mapping operation did not find any mappable content 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] T restkit.core_data:RKManagedObjectMappingOperation.m:98 relationshipsAndPrimaryKeyAttributes: { 
} 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMapper.m:351 The following operations are in the queue: (
) 
2012-05-03 12:52:05.075 RESTKitCoreDataTest[5139:13807] D restkit.object_mapping:RKObjectMapper.m:366 Finished performing object mapping. Results: { 
} 
2012-05-03 12:52:05.080 RESTKitCoreDataTest[5139:fb03] Loaded persons: (
) 
+0

返されたjsonレスポンスのキーがiOSのマッピングと同じではないことに気付きましたか? jsonレスポンスがジャンルを返すのはiOSの性別です。またはこれはスペルミスですか? – LonelyDeveloper

+0

あなたは正しいです、ありがとうございますが、結局は違いはありません - 同じエラーです。私もXMLデータで試してみましたが、そこには正しいマッピングがあり、何も起こりませんでした。 – chritaso

+0

これでオブジェクトマッピングのトレースをオンにしてみます:RKLogConfigureByName( "RestKit/ObjectMapping"、RKLogLevelTrace); –

答えて

1

可能性1:

あなたが間違ったキーパスへのマッピングを設定しているようです。

// Register our mappings with the provider;  
[objectManager.mappingProvider setMapping:personMapping forKeyPath:@"persons"]; 

を試してみて、それが動作するかどうか確認してください。

可能性2:

あなたのマッピングであなたのJSONのルートパスを指定します。

// Map Person Object 
RKManagedObjectMapping *personMapping = [RKManagedObjectMapping mappingForClass:[Person class] inManagedObjectStore:objectManager.objectStore]; 
[personMapping mapKeyPath:@"id" toAttribute:@"person_id"]; 
[personMapping mapKeyPath:@"firstname" toAttribute:@"person_firstname"]; 
[personMapping mapKeyPath:@"lastname" toAttribute:@"person_lastname"]; 
[personMapping mapKeyPath:@"gender" toAttribute:@"person_gender"]; 
personMapping.rootKeyPath = @"persons"; 
personMapping.primaryKeyAttribute = @"id"; 

を試してみて、それが動作するかどうか確認してください。

+0

いいえ、残念ながらそれは何も変わりません。それにもかかわらず、あなたの答えに感謝します。 – chritaso

+0

別のアイデアで私の答えを更新しました。私は現時点で私のプロジェクトで両方の方法を使用しています。 – flashfabrixx

関連する問題