我在使用RestKit发布请求期间将响应映射回对象时遇到问题.
这是代码:
请求:
// mapping for the response. response is an object: {"response":"message","success":bool}
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[GenericResponse class]];
[responseMapping addAttributeMappingsFromArray:@[@"success",@"response"]];
responseMapping.setDefaultValueForMissingAttributes = YES;
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping pathPattern:@"/authenticate" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
// mapping for the request body
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[requestMapping addAttributeMappingsFromArray:@[@"username", @"password"]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[LoginCriteria class] rootKeyPath:nil];
// set up the request
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:8080"]];
[manager addResponseDescriptor:responseDescriptor];
[manager addRequestDescriptor:requestDescriptor];
[manager setRequestSerializationMIMEType:@"application/json"];
// set up the LoginCriteria object
LoginCriteria* loginCriteria = …Run Code Online (Sandbox Code Playgroud) 下面的代码不会删除实体.控制台上出现"删除成功"消息,因此找到了实体.我使用的所有其他操作都成功.
我正在使用RestKit 0.20.
NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
NSError *error = nil;
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID];
[fetchRequest setPredicate:predicate];
NSArray *result = [context executeFetchRequest:fetchRequest error:&error];
if(result.count) {
Auction *block = result[0];
[context deleteObject:block];
BOOL status = [context save:&error];
if (status == NO) {
NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error);
}
else {
[context processPendingChanges];
NSLog(@"delete was successful for AuctionID:%d", auctionID);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么删除操作不成功以及使其工作的解决方案是什么.
我正在尝试使用角度(版本1.0.5)webapp中的应用程序密钥和令牌来运行Trello API.服务器似乎正确配置为处理CORS.来自enable cors的http://test-cors.org的测试请求按预期工作.
当我在我的一个角度控制器中发出请求时:
$http.post(url).success(function(data) {
$scope.server_resp = data;
});
Run Code Online (Sandbox Code Playgroud)
我得到一个Request头字段Access-Control-Allow-Headers错误不允许Content-Type.(即使如下所示,Access-Control-Allow-Origin设置为'*').为什么添加此标题并将其删除?
当我使用原始XMLHttpRequest发出相同的请求时,它会成功.以下是XMLHttpRequest的标头:
Request Method:POST
Status Code:200 OK
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:0
Host:api.trello.com
Origin:http://192.168.0.125:9000
Referer:http://192.168.0.125:9000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Response
Access-Control-Allow-Methods:GET, PUT, POST, DELETE
Access-Control-Allow-Origin:*
Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Content-Length:563
Content-Type:application/json
Date:Mon, 18 Mar 2013 02:49:37 GMT
Expires:Thu, 01 Jan 1970 00:00:00
X-Powered-By:Express
X-Server-Time:1363574977568
Run Code Online (Sandbox Code Playgroud)
以下是角度启动请求的标头.请注意,浏览器发出了飞行前OPTIONS请求:
Request Method:OPTIONS …Run Code Online (Sandbox Code Playgroud) 数组上的python文档清楚地表明该数组符合缓冲区接口.它甚至建议不使用buffer_info()方法.但是当我尝试使用PyObject_GetBuffer()从C/C++代码中获取Py_Buffer或使用python的memoryview时,我得到了一个失败.
例如,在python中(我使用的是2.7版):
>>> a = array.array('c')
>>> memoryview(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot make memory view because object does not have the buffer interface
Run Code Online (Sandbox Code Playgroud)
实际上,当我搜索python的代码库时,只有bytearrayobject(bytearray),memoryobject(memoryview)和stringobject(str)在它们上面设置了所需的Py_TPFLAGS_HAVE_NEWBUFFER标志.据我了解,文档是错误的; 数组不支持缓冲区接口.
我可以使用支持缓冲区接口的bytearray,问题是我需要数组的实用fromfile()方法来读取我可以在我的C/C++代码中使用的缓冲区.
有没有一种方法可以让我将文件读入缓冲区并使用C代码中的缓冲区,而不涉及内存副本?(我想处理大二进制文件,复制是一个不太理想的选择).
我想将带有$ scope事件处理程序的自定义html标记插入到传单标记的message属性中.例如:
App.controller('testController', ['$scope', "leafletEvents", '$compile', 'leafletMarkersHelpers',
function($scope, leafletEvents, $compile, leafletMarkersHelpers){
angular.extend($scope, {
currentLocation : {
lat: 20,
lng: 20,
zoom: 20
},
markers: {
},
defaults: {
scrollWheelZoom: true
},
events: {
map: {
enable: ['zoomstart', 'drag', 'click', 'mousemove', 'popupopen'],
logic: 'emit'
},
markers: {
enable: leafletEvents.getAvailableMarkerEvents()
}
}
});
var html = " <a href=''>info</a><button type='button' ng-click='doSomeAction()'>Choose</button>";
var item = {...}; //some data for marker
$scope.markers["newMarker"] = {
lat: item.lat,
lng: item.lng,
message: item.message + html,
draggable: false …Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些应该非常简单的事情,但是我没有太多的运气来弄清楚现有文档中的内容.
对于python 2项目,我试图将列表gettext-translated字符串作为unicode实例返回给python.gettext()的返回值是一个UTF-8编码的char*,使用PyUnicode_FromString转换为python unicode instrance应该非常简单.我有一种感觉,这是微不足道的,但我似乎无法弄清楚如何.
根据Ignacio Vazquez-Abrams和Thomas KI的评论,确实让这个单线工作; 对于这种情况,您可以绕过所有boost.python基础结构.这是一个例子:
PyObject* PyMyFunc() {
const char* txt = BaseClass::MyFunc();
return PyUnicode_FromString(txt);
}
Run Code Online (Sandbox Code Playgroud)
暴露在通常的def语句中:
class_<MyCclass>("MyClass")
.def("MyFunc", &MyClass::PyMyFunc);
Run Code Online (Sandbox Code Playgroud)
不幸的是,当您想要返回unicode实例列表时,这不起作用.这是我天真的实现:
boost::python::list PyMyFunc() {
std::vector<std::string> raw_strings = BaseClass::MyFunc();
std::vector<std::string>::const_iterator i;
boost::python::list result;
for (i=raw_strings.begin(); i!=raw_strings.end(); i++)
result.append(PyUnicode_FromString(i->c_str()));
return result;
}
Run Code Online (Sandbox Code Playgroud)
但这不编译:boost :: python :: list似乎处理PyObject值.
我正在使用RestKit框架,我想发出一个POST HTTP请求.响应是JSON.我想将JSON响应自动放入CoreData中.
我不知道确切地调用什么方法来发出请求.我知道我应该使用RKObjectManager的方法,但我找不到合适的方法.
我找到了这个方法,postObject:delegate:但我不知道作为参数传递的对象.我也在文档中找到了这个方法:loadObjectsAtResourcePath:usingBlock:但是我不能使用它,因为它告诉我:
No visible @interface for 'RKObjectManager' declares the selector 'loadObjectsAtResourcePath:usingBlock:'
Run Code Online (Sandbox Code Playgroud) 我想封装一个python数组来修复它的类型代码并将其隐藏起来.我以为我可以使用派生来实现这一点,但是我无法构造我的Type,因为它缺少必需的参数:
class MyBinaryBuffer(array.array):
def __init__(self):
array.array.__init__(self, 'B') #this is the fixed 'B' typecode parameter for
#array.array() constructor
myBuffer = MyBinaryBuffer()
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: array() takes at least 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
我怎么能以自然的方式实现这个呢?
经过一些研究,我发现我应该使用构造函数.
编辑:斯文Marnach建议增加自其向我指出添加缺少的CLS parmeter在__ 新 __版本,它的工作原理.
class MyBinaryBuffer(array.array):
def __new__(cls):
return super(MyBinaryBuffer, cls).__new__(cls, 'B')
myBuffer = MyBinaryBuffer()
Run Code Online (Sandbox Code Playgroud) 我在使用RestKit和CoreData时遇到了一些困难,特别是因为RestKit 0.20的示例和文档很少.
我有一个(托管)对象Song与多对一关系Album.以下代码可以发布JSON,但不能以服务器排除的展平格式发布.
// Defined elsewhere
Album *theAlbum;
RKObjectManager *objMan = [self objectManager];
// Response Mapping
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[Song class]];
[responseMapping addAttributeMappingsFromDictionary:@{ @"song": @"songID" }];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
pathPattern:@"/api/song"
keyPath:nil
statusCodes:statusCodes];
// Request Mapping
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
RKEntityMapping *albumRelationshipMapping = [RKEntityMapping mappingForEntityForName:@"Album" inManagedObjectStore:[objMan managedObjectStore]];
[albumRelationshipMapping addAttributeMappingsFromDictionary:@{@"id": @"albumID", }];
[requestMapping addAttributeMappingsFromDictionary:@{ @"title": @"title", @"length": @"length" }];
[requestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"album"
toKeyPath:@"album"
withMapping:albumRelationshipMapping]];
requestMapping = [requestMapping inverseMapping]; …Run Code Online (Sandbox Code Playgroud) 在RestKit 0.2中,如何允许我的应用程序连接到具有无效https安全证书的服务器?从AFNetworking文档来看,我所要做的就是#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_.但是,我已将该命令添加到我的pch文件,Build Settings> Preprocessor Macros和我的App Delegate.所有这些都无法连接.有任何想法吗?
我正在尝试更新我使用Restkit 0.1到0.20的现有应用程序,但在设置核心数据堆栈时遇到一些问题,因为它遇到异常.
我的AppDelegate上有以下代码:
/*
Complete Core Data stack initialization
*/
NSError *error = nil;
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"AppModel" ofType:@"momd"]];
// NOTE: Due to an iOS 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
[managedObjectStore createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"TSI.sqlite"];
NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"];
//NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error];
NSAssert(persistentStore, …Run Code Online (Sandbox Code Playgroud) 我有一个简单的UIViewController派生控制器,它有UITextFields.
同样使用IB,我放置了一个UIToolbar和两个UIBarButtonItems.我按Ctrl-拖动以向按钮添加操作.
- (IBAction)cancel:(id)sender { ... }
- (IBAction)save:(id)sender { ... }
Run Code Online (Sandbox Code Playgroud)
如果我运行代码,则会调用操作.
问题:我想在背景上实现resignFirstResponder范例,所以我在根视图上添加了一个UITapGestureRecognizer:
- (void)viewDidLoad {
...
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
}
Run Code Online (Sandbox Code Playgroud)
当我有手势识别器时,不会调用UIBarButtonItems的动作
我怎么能双管齐下?
感谢您的任何解释,可以帮助我实现这一点.
我刚刚开始使用RestKit,并且在Rk 0.20正在运行时已经到达,文档和演示是落后的.网上的大多数内容都是0.10卢比,而且0.20版本有很大的变化.
当新版本很快就会启动并运行时,我不想回到早期版本.
我在URL"test.myserver.com"上有一个JSON资源,它返回一个简单的数据报 - {"id_user":"4401","datalocation":"4401","country":"Great-Britain","data" ":"testdata","login":"Fred Bloggs","password":"579c0cb0ed2dc25db121283f7a98cc71","accessLevel":"2","timestamp":"1012","datahash":"2749da29f20ce7a85092323f193adee8"}
我很确定我有Mappings等排序,但我的服务需要身份验证,所以我需要将请求中的用户名和密码传递给服务器.
到目前为止我有这个
NSURL *url = [NSURL URLWithString:@"http://test.myserver.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
RKLogInfo(@"Load collection of Articles: %@", mappingResult.array);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
RKLogError(@"Operation failed with error: %@", error);
}];
[objectRequestOperation start];
Run Code Online (Sandbox Code Playgroud)
这似乎与服务器联系但不可避免地记录以下错误
restkit.network:RKObjectRequestOperation.m:296对象请求失败:基础HTTP请求操作失败,错误:错误Domain = org.restkit.RestKit.ErrorDomain Code = -1011"预期状态代码在(200-299),得到401"UserInfo = 0x7884030 {NSLocalizedRecoverySuggestion = {"error":{"code":401,"message":"Unauthorized:Authentication required"}},AFNetworkingOperationFailingURLRequestErrorKey = http://elancovision.umfundi.com>,NSErrorFailingURLKey = http:// elancovision .umfundi.com,NSLocalizedDescription =预期状态代码(200-299),得到401,AFNetworkingOperationFailingURLResponseErrorKey =}
问题当然是我如何在请求中添加用户名和密码.
抱歉,这个菜鸟问题!
ios ×7
restkit ×7
restkit-0.20 ×7
python ×3
angularjs ×2
core-data ×2
arrays ×1
boost ×1
boost-python ×1
buffer ×1
c++ ×1
constructor ×1
http ×1
javascript ×1
leaflet ×1
memoryview ×1
new-operator ×1
objective-c ×1
pep3118 ×1
request ×1