restkit 版本 0.20 上的 fetchRequest - 没有已知的类方法

Posted

技术标签:

【中文标题】restkit 版本 0.20 上的 fetchRequest - 没有已知的类方法【英文标题】:fetchRequest on restkit version 0.20 - No Known Class Method 【发布时间】:2013-02-06 01:48:41 【问题描述】:

我正在我的一个应用程序上从 RestKit 0.10 迁移到 0.20。我查看了https://github.com/RestKit/RestKit/wiki/Upgrading-from-v0.10.x-to-v0.20.0 的页面,但没有看到这个问题。

edit 2013-02-09 添加映射代码和 loadObjectData 方法 *

RestKit 是通过 CocoaPods 添加的。

这在 RK 0.10 中工作,然后在 RK 0.20 中编译。这个片段可以:

    创建 fetchRequest 添加谓词 添加排序 获取中继器数组

我有以下进口,按顺序:

// RestKit
#import <RestKit/RestKit.h>
#import <RestKit/CoreData.h>

// Core Data
#import "Repeaters.h"

代码sn-p:

    NSArray *sortDescriptors;
*1  NSFetchRequest *sortedRequest = [Repeaters fetchRequest]; // RestKit 0.10
    // NSFetchRequest *sortedRequest = [NSFetchRequest fetchRequestWithEntityName:@"Repeaters"]; // RestKit 0.20?

    // Predicate Filter by Grouping
    NSString *predicateString = @"";

    if ([appDelegate getIncludeIrlpPreference]) 
        predicateString =  [predicateString stringByAppendingFormat:@"(grouping LIKE 'irlp')"];
    

    if ([appDelegate getIncludeWsiPreference]) 
        if([predicateString length] > 0) predicateString = [predicateString stringByAppendingFormat:@" OR "];
        predicateString =  [predicateString stringByAppendingFormat:@"(grouping LIKE 'winsystem')"];
    

    // Distance Sort
    if([selectedSegmentString isEqualToString:kRepeaterSortDistance]) 

        // Sort by distance
        NSSortDescriptor * sortBydistance = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES];
        sortDescriptors = [NSArray arrayWithObjects:sortBydistance, nil ];

    

    // Add the Sort to the fetch request
    [sortedRequest setSortDescriptors:sortDescriptors];

    // Add the Predicate to the fetch request
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
    [sortedRequest setPredicate:predicate];

    // Fetch the data - filtered and sorted
*2  self.repeaters = [Repeaters objectsWithFetchRequest:sortedRequest]; // RestKit 0.10

Repeaters 类的映射代码:

 RKManagedObjectMapping *repeatersMapping = [RKManagedObjectMapping mappingForEntityWithName:kEntityRepeaters inManagedObjectStore:objectStore];
 [repeatersMapping mapKeyPath:@"callSign" toAttribute:@"callSign"];
 [repeatersMapping mapKeyPath:@"country" toAttribute:@"country"];
 [repeatersMapping mapKeyPath:@"freqOffsetPl" toAttribute:@"freqOffsetPl"];
 [repeatersMapping mapKeyPath:@"grouping" toAttribute:@"grouping"];
 [repeatersMapping mapKeyPath:@"latitudeDefault" toAttribute:@"latitudeDefault"];
 [repeatersMapping mapKeyPath:@"longitudeDefault" toAttribute:@"longitudeDefault"];
 [repeatersMapping mapKeyPath:@"locationElevation" toAttribute:@"locationElevation"];
 [repeatersMapping mapKeyPath:@"node" toAttribute:@"node"];
 [repeatersMapping mapKeyPath:@"notes" toAttribute:@"notes"];
 [repeatersMapping mapKeyPath:@"repeaterId" toAttribute:@"repeaterId"];
 [repeatersMapping mapKeyPath:@"serviceArea" toAttribute:@"serviceArea"];
 [repeatersMapping mapKeyPath:@"serviceState" toAttribute:@"serviceState"];
 [repeatersMapping mapKeyPath:@"url" toAttribute:@"url"];
 repeatersMapping.primaryKeyAttribute = kEntityRepeaterKey;
 [wsiObjectManager.mappingProvider registerMapping:repeatersMapping withRootKeyPath:@"winSystem.winSystemRepeaters.winSystemRepeater"];

loadObjectData 方法:

- (void)loadObjectData 

        [[RKObjectManager sharedManager] loadObjectsAtResourcePath:kWinSystemInfoXml delegate:self];

Xcode 错误:


*1 RepeatersTableViewController.m:116:37: 选择器“fetchRequest”没有已知的类方法

*2 RepeatersTableViewController.m:170:22: 选择器'objectsWithFetchRequest:'没有已知的类方法


就像核心数据位没有添加到中继器类中一样。

是否有其他关于 v0.10 到 v0.20 转换的文档可以帮助我了解更多更改?

【问题讨论】:

请求呢?您能否提供更多代码,因为似乎缺少一些东西。你使用对象映射吗?将此添加到您的答案中。 sortedRequest 是请求,[Repeaters objectsWithFetchRequest:sortedRequest]; 调用使用该请求执行获取。托管对象映射代码已添加到问题中。 好的,刚刚查看了您的问题,发现您实际上正在尝试使用 v.20 运行 RestKit v.10 配置 - 由于该过程已在 v 中重写,因此无法正常工作.20。查看发布的链接并编辑您的方法以使事情再次正常运行! 是的,重新编码以匹配新方案。太糟糕了,它工作得很好。 【参考方案1】:

在没有详细查看您的问题的情况下,https://github.com/RestKit/RestKit/wiki/Object-mapping 已经回答了我的许多 restkit .20 问题。

【讨论】:

谢谢。我现在就从那里开始,

以上是关于restkit 版本 0.20 上的 fetchRequest - 没有已知的类方法的主要内容,如果未能解决你的问题,请参考以下文章

从 RestKit 0.10 更新到 0.20

RestKit 0.20 映射问题

RestKit 0.20:restkit 对象映射使属性映射加倍

RESTKit 0.20 - 注销和清除授权标头

使用 RestKit 0.20 初始化核心数据

RestKit 0.20 和 ManagedObjectContexts