菜鸟教程小白 发表于 2022-12-12 13:14:25

iphone - 对象映射 Restkit 不映射嵌套对象


                                            <p><p>我正在尝试映射来自具有 2 个属性的服务器的响应:</p>

<ul>
<li>一个数字,它是数组中对象的计数</li>
<li>我已经在其他类中映射的数组用户对象。</li>
</ul>

<p>这就是我拥有类(class)模型的方式:</p>

<p> <img src="/image/IJICy.png" alt="enter image description here"/> </p>

<p>及其与具有“参与者”关系的用户类相关。</p>

<p>我知道我要映射的嵌套类正在工作,因为我在其他类中使用它并且效果很好,但是这个实现不同,所以我不知道如何映射它。</p>

<p>我的课上有这个:</p>

<p><strong>.h 类:</strong></p>

<pre><code>#import &lt;Foundation/Foundation.h&gt;
#import &lt;CoreData/CoreData.h&gt;
#import &#34;NSManagedObject+Convenience.h&#34;

@interface DUParticipant : NSManagedObject

@property (nonatomic, retain) NSNumber * participantsCount;
@property (nonatomic, retain) NSSet *participants;

+ (RKEntityMapping *)mapping;
+ (void)configMapping;

@end
</code></pre>

<p><strong>.m 类</strong></p>

<pre><code>#import &#34;DUParticipant.h&#34;
#import &#34;DUUser+Ext.h&#34;

@implementation DUParticipant

@dynamic participantsCount;
@dynamic participants;

+ (RKEntityMapping *)mapping
{
    RKEntityMapping* map = ;

    [map addAttributeMappingsFromDictionary:@{
      @&#34;participants_count&#34;: @&#34;participantsCount&#34;
   }];


    return map;
}

+(void) configMapping{


    RKObjectManager* man= ;
    RKEntityMapping* map = ;
    [man addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:map pathPattern:@&#34;/v1/users/participants&#34; keyPath:nil
                                                                     statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

    RKObjectMapping *requestMapping = ;
    [requestMapping addAttributeMappingsFromDictionary:@{
      @&#34;participants_count&#34;: @&#34;participantsCount&#34;
   }];

    [map addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@&#34;participants&#34;
                                                                        toKeyPath:@&#34;participants&#34;
                                                                      withMapping:]];

    [man addRequestDescriptor:[RKRequestDescriptor requestDescriptorWithMapping:requestMapping
                                                                  objectClass: rootKeyPath:@&#34;DUParticipant&#34;]];

}

@end
</code></pre>

<p>而json的响应是:</p>

<pre><code>{
    &#34;participants_count&#34;: 1,
    &#34;participants&#34;: [
      {
            &#34;participant&#34;: {
                &#34;id&#34;: 3,
                &#34;gender&#34;: &#34;M&#34;,
                &#34;name&#34;: &#34;Oscar&#34;,
                &#34;lastname&#34;: &#34;Lares&#34;,
                &#34;username&#34;: &#34;CaLe&#34;,
                &#34;email&#34;: &#34;[email protected]&#34;,
                &#34;bio&#34;: &#34;UX Designer! Mac Geek, Computers, Gadgets and Movies lover!&#34;,
                &#34;created_at&#34;: &#34;2012-07-28T18:34:27Z&#34;,
                &#34;updated_at&#34;: &#34;2013-07-29T13:05:21Z&#34;,
                &#34;cover&#34;: null,
                &#34;avatar&#34;: {
                  &#34;id&#34;: 108,
                  &#34;original&#34;: &#34;https://duuin.s3.amazonaws.com/uploads/image/file/108/photo.jpg&#34;,
                  &#34;thumbnail&#34;: &#34;https://duuin.s3.amazonaws.com/uploads/image/file/108/thumb_photo.jpg&#34;
                }
            }
      }
    ]
</code></pre>

<p>**** ** 编辑** ****
这是我在日志控制台中的内容,它是 json 响应:</p>

<pre><code>response.body =
{
    &#34;participants_count&#34;: 2,
    &#34;participants&#34;: [
      {
            &#34;participant&#34;: {
                &#34;id&#34;: 3,
                &#34;gender&#34;: &#34;M&#34;,
                &#34;name&#34;: &#34;blabla&#34;,
                &#34;lastname&#34;: &#34;blabla&#34;,
                &#34;username&#34;: &#34;blabla&#34;,
                &#34;email&#34;: &#34;blabla&#34;,
                &#34;bio&#34;: &#34;blablablablablabla&#34;,
                &#34;created_at&#34;: &#34;2012-07-28T18:34:27Z&#34;,
                &#34;updated_at&#34;: &#34;2013-07-29T13:05:21Z&#34;,
                &#34;cover&#34;: null,
                &#34;avatar&#34;: {
                  &#34;id&#34;: 108,
                  &#34;original&#34;: &#34;blabla&#34;,
                  &#34;thumbnail&#34;: &#34;blabla&#34;
                }
            }
      },
      {
            &#34;participant&#34;: {
                &#34;id&#34;: 1,
                &#34;gender&#34;: &#34;M&#34;,
                &#34;name&#34;: &#34;blabla&#34;,
                &#34;lastname&#34;: &#34;blabla&#34;,
                &#34;username&#34;: &#34;blabla&#34;,
                &#34;email&#34;: &#34;blabla&#34;,
                &#34;bio&#34;: &#34;blabla&#34;,
                &#34;created_at&#34;: &#34;2012-07-22T20:30:18Z&#34;,
                &#34;updated_at&#34;: &#34;2013-07-31T03:52:26Z&#34;,
                &#34;cover&#34;: {
                  &#34;id&#34;: 21,
                  &#34;original&#34;: &#34;blabla&#34;,
                  &#34;thumbnail&#34;: &#34;blabla&#34;
                },
                &#34;avatar&#34;: {
                  &#34;id&#34;: 19,
                  &#34;original&#34;: &#34;blabla&#34;,
                  &#34;thumbnail&#34;: &#34;blabla&#34;
                }
            }
      }
    ]
}
</code></pre>

<p>以及日志中的对象:</p>

<pre><code>2013-08-01 13:35:43.949 duuin Participant: &lt;NSManagedObject: 0x16d7ef00&gt; (entity: DUParticipant; id: 0x16d74170 &lt;x-coredata://1C844BC7-AF17-4D27-90F9-9F5B8ACDF848/DUParticipant/p86&gt; ; data: {
    participants = nil;
    participantsCount = 2;
})
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为问题在于您的嵌套类映射。它可能在其他时候也能正常工作,但我猜上下文是不同的。在您显示的代码中,参与者位于字典中的 <code>participant</code> 键中。这需要反射(reflect)在映射中的所有键中。</p>

<hr/>

<p>大概你的映射当前有:</p>

<pre><code>@&#34;gender&#34; -&gt; @&#34;gender&#34;
</code></pre>

<p>但是对于您显示的 JSON,它必须是:</p>

<pre><code>@&#34;participant.gender&#34; -&gt; @&#34;gender&#34;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 对象映射 Restkit 不映射嵌套对象,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17984176/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17984176/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 对象映射 Restkit 不映射嵌套对象