我对iPhone / Objective-c编程很陌生。我正在努力解决一个对我没有意义的问题。我正在编写一个应用程序,作为代码的一部分,将使用休息服务。我写的使用ASIHttpRequest库进行Post调用的方法如下所示:
- (NSString *) httpPostStringResponseUrl:(NSURL *)url:(NSDictionary *)args{
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
NSArray *keys = [args allKeys];
NSEnumerator *e = [args keyEnumerator];
NSString* object;
while (object = [e nextObject]) {
NSLog(@"Adding to args key: %@", object);
[request setPostValue:[keys valueForKey:object] forKey:object];
}
NSLog(@"Starting http POST request");
[request startSynchronous];
NSString *response = [request responseString];
return response;
}
这个想法是传入参数及其值的字典,并将它们用作POST请求的参数。但是,当我运行此代码时,我得到一个NSUnknownKeyException。
这对我没有意义。我正在进行的字典的唯一访问是使用迭代器提供的键。那么,它们如何成为迭代器的一部分而不是有效的密钥呢?
为了完整性,这里是我调用上述函数的代码:
NSMutableDictionary *params = [[[NSMutableDictionary alloc] init] autorelease];
NSURL *url = [[[NSURL alloc] initWithString:@"http://myURL"] autorelease];
[params setValue:@"user" forKey:@"Username"];
[params setValue:@"1234" forKey:@"Password"];
NSString *response = [web httpPostStringResponseUrl:url :params];
NSLog(@"Response is \"%@\"", response);
答案 0 :(得分:0)
问题是您正在尝试在keys
数组中查找键的值,而不是在args
字典中。尝试这样的事情:
for (NSString *key in args) {
NSLog(@"Adding to args key: %@", key);
[request setPostValue:[args objectForKey:key] forKey:key];
}
注意,这也使用fast enumeration而不是显式(慢)枚举。
答案 1 :(得分:-1)
我可以看到你的方法签名是错误的,我不知道该代码是如何编译的。
- (NSString *) httpPostStringResponseUrl:(NSURL *)url:(NSDictionary *)args
上述行被打破。这应该是正确的:
- (NSString *) httpPostStringResponseUrl:(NSURL *)url params:(NSDictionary *)args
电话也应该是这样的:
NSString *response = [web httpPostStringResponseUrl:url params:params];