Tag: restkit

RestKit GET查询参数

我一直在使用RestKit 0.10.0,直到现在,我只把序列化的对象发布到我的服务器上: [[RKObjectManager sharedManager] postObject:serializedObject usingBlock:^(RKObjectLoader *loader) { loader.delegate = self; loader.objectMapping = responseMapping; loader.serializationMIMEType = RKMIMETypeFormURLEncoded; loader.targetObject = nil; }]; 到现在为止还挺好。 但是我现在需要用几个查询参数向服务器发出一个GET请求。 想到的第一个自然的事情就是像我一样发布对象: 为封装查询参数的对象创build一个序列化映射 为从服务器接收的对象创build一个响应映射 为RKRequestMethodGET定义并使用路由器(而不是RKRequestMethodPOST) 使用getObject:usingBlock(而不是postObject:usingBlock)创build请求 我很快发现这不是这样做的,所以在search可用资源( RestKit Wiki , RestKit Google小组 )之后,我现在知道两种解决scheme被认为是有效的: 将查询参数附加到资源path。 这完美的作品。 NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys: token, @"accessToken", [NSNumber numberWithInt:level], @"level", [NSNumber numberWithInt:count], @"count", nil]; NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH […]

RestKit核心数据NSError dealloc崩溃

试图深入到我在生产版本中看到的问题的底部,最终在testing时能够重现它。 使用RestKit v0.23.1,当使用下面的代码(插入到乐器中)执行RKManagedObjectRequestOperation时,我得到“一个Objective-C消息被发送到一个释放的'NSError'对象(僵尸)”,并且每次有对象时应用程序崩溃响应JSON – 如果响应类似于“objects =();” 没有崩溃 – 所以我猜测它在RestKit / Core Data映射或存储中的某处? RKManagedObjectRequestOperation *objectRequestOperation = [_objectManager managedObjectRequestOperationWithRequest:request managedObjectContext:_objectManager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { DDLogInfo(@"INSIDE SUCCESS BLOCK"); } failure:^(RKObjectRequestOperation *operation, NSError *error) { DDLogInfo(@"INSIDE ERROR BLOCK"); }]; [objectRequestOperation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) { DDLogInfo(@"Response JSON: %@", deserializedResponseBody); return deserializedResponseBody; }]; objectRequestOperation.savesToPersistentStore = YES; [objectRequestOperation start]; 原始JSON在setWillMapDeserializedResponseBlock中正确logging,但成功和错误块内的日志永远不会到达。 这里是我从crashlytics得到的堆栈跟踪: Thread […]

我不能在Swift项目的两个目标中使用我的核心数据模型

核心数据模型中实体模型的类名称必须具有应用程序名称。 因此,对于名为User的实体,模型编辑器中的类名称必须是MyAppName.User。 这工作正常,直到我添加了第二个目标到我的项目。 新项目期望实体类名称为SecondAppTargetName.User。 我们如何使用相同的核心数据模型支持两个目标? 我试着预先join$ {PRODUCT_NAME} .User,而不是期待它的工作。 它不起作用。 关于如何在目标之间共享一个核心数据模型以及如何满足Swift项目在模型编辑器中将PRODUCT_NAME预先添加到类中的想法? 编辑:从这里的苹果文件显示,模块实体检查器中的类名添加模块名称作为前缀是首选的行为。 如果是这样,这看起来像一个大洞,因为它排除了多个目标使用相同的数据模型。 我仍然没有find解决办法。 在这里的一些post已经表明,在托pipe对象的Swift类定义之前使用@objc(ClassName)将做到这一点,但我还没有能够validation。

核心数据的RestKit临时对象的最佳实践

背景:我有一个托pipe对象,Car。 我有一个RESTfulsearchAPI坐在本地主机/汽车/search。 返回的结果是来自服务器端的Car对象,但我只想保存用户select的那个。 我想放弃search的其他车辆。 起初我都喜欢: @interface Car : NSManagedObject //<— managed object @property (nonatomic, strong) NSNumber* year; @property (nonatomic, strong) NSString* make; @property (nonatomic, strong) NSString* model; @end @interface TransientCar : NSObject //<— regular NSObject! @property (nonatomic, strong) NSNumber* year; @property (nonatomic, strong) NSString* make; @property (nonatomic, strong) NSString* model; @end 为了显示search结果,我将REST APIsearch结果JSON映射到TransientCar对象中,但不将它们保存到上下文中。 默认情况下,如果映射托pipe对象,RestKit将调用其+对象便利工厂创build对象并将其插入当前上下文(硬编码到sharedManager的对象存储的上下文,btw!) 这似乎是不可持续的。 […]

RestKit:映射JSONstring数组

鉴于以下JSON: { "someKey":"someValue", "otherKey":"otherValue", "features":[ "feature1", "feature2", "feature3" ] } 我使用RKMapperOperation和RKEntityMapping将这个JSON映射到NSManagedObject (在这个例子中,我将有2个实体映射:一个用于顶层对象,另一个用于我的Feature类)。 顶级对象映射是微不足道的:两个属性映射加上与特征关系的关系(特征)。 我的问题是,如何将functionJSON数组映射到一个Feature对象的数组? Feature类只有一个属性name ,我想在其中存储“feature1”,“feature2”等,并加上对父对象(顶层)的引用。 像这样的东西: @interface Feature : NSManagedObject //In the implementation file both properties are declared with @dynamic. @property (nonatomic, retain) NSString * name; @property (nonatomic, retain) MyTopLevelObject *myTopLevelObject; @end 任何想法?

在Restkit iOS中parsingJSON而不用对象映射

我创build了一个使用Restkit RKClient发送login细节的login页面,并获取JSON数据(无论是用户还是错误)。 我希望能够parsingJSON数据而无需对象映射,只需要JSON即可字典。 原因是这只是一个简单的login发送用户名和密码,如果我设置对象映射,我将不得不设置login对象的详细信息,然后设置路由等…这似乎是有点啰嗦。 这是我的代码 – (IBAction)login:(id)sender { [self.activityIndicator startAnimating]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObject:self.username.text forKey:@"username"]; [params setObject:self.password.text forKey:@"password"]; [params setObject:@"login" forKey:@"type"]; [[RKClient sharedClient] post:@"/login" params:params delegate:self]; } – (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response { if ([request isPOST]) { if ([response isJSON]) { NSLog(@"Got a JSON response back from our POST: %@", response.bodyAsString); } } [self.activityIndicator stopAnimating]; } […]

如何使用RestKit将对象发布到rails?

我正在尝试使用RestKit和Rails来实现魔法。 我正在使用Rails 3.1.1和RestKit 0.9.3(不是主分支)。 我在我的iOS应用程序中使用核心数据,所以我试图设置应用程序使用尽可能多的RestKit魔术来与rails应用程序进行交互。 但是,我有一个问题试图POST一个新的对象到我的服务器来创build。 我已经成功地把对象取下来了。 这是我的代码来做到这一点: RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://IP_ADDRESS"]; manager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"magikarp.sqlite"]; manager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; manager.acceptMIMEType = RKMIMETypeJSON; manager.serializationMIMEType = RKMIMETypeJSON; /// /// Setup Routing /// RKObjectRouter *router = [[RKObjectRouter alloc] init]; [router routeClass:[List class] toResourcePath:@"/lists/(listID)"]; [router routeClass:[List class] toResourcePath:@"/lists" forMethod:RKRequestMethodPOST]; manager.router = router; /// /// Setup mapping for my […]

一次有多个RKObjectManager(RestKit)

我正在testingRestKit,需要访问不同的BaseUrls,有时也会从不同的地方一次访问同一个baseUrl的Web服务,最后我还需要在同一个控制器中访问同一个baseUrl,并使用不同的资源path。 在我的应用程序委托中,我像这样设置了RKObjectManager单例。 RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:kBaseUrl]; [objectManager registerClass:[EntityClass1 class] forElementNamed:@"element1"]; [objectManager registerClass:[EntityClass2 class] forElementNamed:@"element2"]; . . . etc. 单身方法很容易处理,但我不知道如何分离不同的Web服务调用。 在实现RKObjectLoaderDelegate的MyViewController中,我将有两个方法: – (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { //stuff with result } – (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error { //stuff with error } 当MyViewController使用一个RKObjectManager单例访问一个具有一个baseUrl的资源path时,这不会造成任何问题。 如果我以这种方式开始不同的请求: [[RKObjectManager sharedManager] loadObjectsAtResourcePath:FLICKRPath delegate:self] [[RKObjectManager sharedManager] loadObjectsAtResourcePath:FOURSQUAREPath delegate:self] 等等,在同一个MyController中,我的问题是FLICKRPath和FOURSQUAREPATH当然有不同的baseUrl,但是RKObjectManager只有一个? 如果我得到这个工作,并可以有不同的RKObjectManagers另一个问题出现。 委托方法didLoadObjects和didFailWithError将接收来自两个RKObjectManagers的结果,我不能看到任何其他方式告诉他们比他们的baseUrls分开。 在委托方法中,可能将每个返回值与一个baseUrl,甚至更糟糕的是一个ressourcePath进行比较,根本不吸引我。 […]

Restkit json来自服务器的错误响应信息

我已经用了很多时间来解决这个问题。 我使用Restkit 0.9.3与对象映射2.0。 所有的数据都是JSON。 我可以正确地进行GET,POST,PUT和DELETE操作,它是我不会捕获和映射的响应体。 所以我的问题是,我的宁静API是返回错误时出现问题。 我想用restkit映射这些错误,fx返回这个错误: {“code”:“401”,“message”:“未经授权”} 我如何映射这个JSON正确? 我已经尝试了很多东西,可以使用一些指导 – 或者请举一个例子。

RestKit图片上传

我正在使用RestKit来驱动与我的Web服务器的交互。 我正在尝试使用路由将POST事件对象添加到附加有图像的服务器。 代码如下: RKObjectManager *manager = [RKObjectManager sharedManager]; RKObjectMapping *map = [self eventMapping]; manager.serializationMIMEType = RKMIMETypeFormURLEncoded; map.rootKeyPath = @"event"; [manager.mappingProvider setSerializationMapping:map forClass:[Event class]]; [manager.router routeClass:[Event class] toResourcePath:@"/v1/events.json" forMethod:RKRequestMethodPOST]; [manager postObject:event delegate:self block:^(RKObjectLoader *loader){ RKObjectMapping *serMap = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[Event class]]; NSError *error = nil; NSDictionary *d = [[RKObjectSerializer serializerWithObject:event mapping:serMap] serializedObject:&error]; RKParams *p = […]