菜鸟教程小白 发表于 2022-12-12 18:17:02

ios - 在 restKit 0.20 中删除孤立对象


                                            <p><p>目前我正在努力删除<code>孤立对象</code>。
我有以下类(class)。</p>

<p><strong>映射器类</strong></p>

<p>在这个类中,我创建了我所有的 RKObjectManagers 并在我的其他类中使用它。 </p>

<pre><code>-(RKObjectManager *)mapAppointments{
    RKEntityMapping* appointmentMapping = ;
    appointmentMapping.identificationAttributes = @[@&#34;app_id&#34;,@&#34;app_start&#34;] ;
    [appointmentMapping addAttributeMappingsFromDictionary:@{
                                                       @&#34;AddressInfo&#34;: @&#34;app_addressinfo&#34;,
                                                       @&#34;Completed&#34;: @&#34;app_completed&#34;,
                                                       @&#34;Description&#34;: @&#34;app_description&#34;,
                                                       @&#34;EndDate&#34;:@&#34;app_end&#34;,
                                                       @&#34;FullDay&#34;: @&#34;app_fullday&#34;,
                                                       @&#34;Id&#34;:@&#34;app_id&#34;,
                                                       @&#34;Label&#34;: @&#34;app_label&#34;,
                                                       @&#34;LabelId&#34;: @&#34;app_label_id&#34;,
                                                       @&#34;Location&#34;: @&#34;app_location&#34;,
                                                       @&#34;Private&#34;:@&#34;app_private&#34;,
                                                       @&#34;ProjectName&#34;:@&#34;app_project_name&#34;,
                                                       @&#34;ProjectNumber&#34;: @&#34;app_project_number&#34;,
                                                       @&#34;RecurrenceInfo&#34;: @&#34;app_recurrenceInfo&#34;,
                                                       @&#34;RelationAddressCity&#34;: @&#34;app_relation_address_city&#34;,
                                                       @&#34;RelationAddressId&#34;:@&#34;app_relation_address_id&#34;,
                                                       @&#34;RelationAddressName&#34;: @&#34;app_relation_address_name&#34;,
                                                       @&#34;RelationAddressStreet&#34;:@&#34;app_relation_address_street&#34;,
                                                       @&#34;RelationCode&#34;: @&#34;app_relation_code&#34;,
                                                       @&#34;RelationContactPersonId&#34;: @&#34;app_relation_contact_id&#34;,
                                                       @&#34;RelationContactPersonName&#34;: @&#34;app_relation_contact_name&#34;,
                                                       @&#34;RelationName&#34;:@&#34;app_relation_name&#34;,
                                                       @&#34;ReminderInfo&#34;:@&#34;app_reminder_info&#34;,
                                                       @&#34;StartDate&#34;: @&#34;app_start&#34;,
                                                       @&#34;State&#34;: @&#34;app_state&#34;,
                                                       @&#34;Subject&#34;: @&#34;app_subject&#34;,
                                                       @&#34;SupplierCode&#34;:@&#34;app_supplier_code&#34;,
                                                       @&#34;SupplierContactPersonId&#34;: @&#34;app_supplier_contact_person_id&#34;,
                                                       @&#34;SupplierContactPersonName&#34;:@&#34;app_supplier_contact_person_name&#34;,
                                                       @&#34;SupplierName&#34;: @&#34;app_supplier_name&#34;,
                                                       @&#34;Type&#34;: @&#34;app_type&#34;,
                                                       @&#34;ResxPers&#34;:@&#34;app_resxPers&#34;,
                                                       }];







    RKResponseDescriptor *responseDescriptor = ];
    NSArray *arrResponsDescriptor = [initWithObjects:responseDescriptor,nil];

    ;
    return objectManager;

}
</code></pre>

<p><strong>网络服务类</strong></p>

<p>在这个类中,我完成了我的请求,并尝试删除孤立对象。</p>

<pre><code>-(void)fetchAppointmentsOnCompletionFor:(NSDate *)start andEnd:(NSDate *)end OnCompletion:(myCompletion) compblock{
    Mapper *mapper = ;
    RKManagedObjectStore *store = [ objectStore];
    NSLog(@&#34;store is %@&#34;,store);
    NSManagedObjectContext *context = store.mainQueueManagedObjectContext;
    RKObjectManager *objectManager = ;

    NSDateFormatter *dateFormatter = [init];
    ];
    ;
    NSString *strStart = ;
    NSString *strEnd = ;

    NSString *userName = [valueForKey:@&#34;userName&#34;];
    NSString *hash = [valueForKey:@&#34;hash&#34;];
    NSString *urlString = ;


    [objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {

      RKPathMatcher *pathMatcher = ;

      NSDictionary *argsDict = nil;
      BOOL match = tokenizeQueryStrings:NO parsedArguments:&amp;argsDict];

      if (match) {
            NSFetchRequest *fetchRequest = ;
            fetchRequest.predicate = ; // NOTE: Coerced from string to number
            fetchRequest.sortDescriptors = @[ ];
            return fetchRequest;
      }

      return nil;
    }];

    NSURLRequest *request = ;
    RKManagedObjectRequestOperation *operation = [objectManager managedObjectRequestOperationWithRequest:request managedObjectContext:context success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

      NSLog(@&#34;REQUEST URL = %@&#34;,request.URL);
      NSError *error = nil;
      BOOL success = ;
      if (!success) RKLogWarning(@&#34;Failed saving managed object context: %@&#34;, error);
      NSLog(@&#34;SUCCESS&#34;);
      NSError *saveError = nil;

      for (Appointment *appointment in mappingResult.array) {
            NSLog(@&#34;Appointment title is %@&#34;,appointment.app_subject);
            appointment.synchronized = @1;
            appointment.app_delete = @0;
            ;

      }

      [self fetchAfwezighedenOnCompletionFor:start andEnd:end OnCompletion:^(BOOL finished) {
            if(finished){
                compblock(YES);
            }
      }];

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
      UIAlertView *alert = [ initWithTitle:@&#34;Error&#34;
                                                      message:
                                                       delegate:nil
                                              cancelButtonTitle:@&#34;OK&#34;
                                              otherButtonTitles:nil];
      ;
      NSLog(@&#34;Hit error: %@&#34;, error);
    }];
    ;
}
</code></pre>

<p><strong>问题</strong></p>

<p>目前,<code>孤立对象</code>并未被删除。我做错了什么还是设置不正确?</p>

<p>感谢您的帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>查看 <code>RKObjectManager managedObjectRequestOperationWithRequest:</code> 的代码表明,获取请求 block 是从传递给操作的对象管理器传递的。因此,需要进行调试才能弄清楚为什么没有调用它。它应该在所有“成功”场景(即响应描述符与接收到的响应匹配的场景)中调用。</p>

<p>您可以考虑使用管理器发出请求而不是获取请求并使用 <code>RKManagedObjectRequestOperation</code>,但理论上这应该只是更少的代码而不是功能上的差异。</p >

<hr/>

<p>尝试更改获取请求 block :</p>

<pre><code>RKPathMatcher *pathMatcher = ;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 restKit 0.20 中删除孤立对象,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21375981/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21375981/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 restKit 0.20 中删除孤立对象