AFNetworking 怎么没有输出,也不报错

2014-05-25 14:32:40 +08:00
 YY
想学习下objc,第一下就碰到问题了。
就是官网上GET请求的例子,可以编译通过运行,Hello world可以输出,可是网络请求那部分什么也不输出,也不报错。

创建的osx command line项目,Pod安装依赖

求助还有哪里要配置的 xcode5 没有看见Capabilities tab



代码如下,
http://paste.ubuntu.com/7514064/

#import <Foundation/Foundation.h>
#import "AFHTTPRequestOperationManager.h"

int main(int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...
NSLog(@"Hello, World!");
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://www.baidu.com/"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];

}
return 0;
}
3228 次点击
所在节点    iDev
11 条回复
dorentus
2014-05-25 14:37:27 +08:00
大概是因为还来得及输出,你的程序就退出了……
twoconk
2014-05-25 14:38:52 +08:00
从代码看木有什么问题呢
txx
2014-05-25 14:40:12 +08:00
这样肯定不行啊...
网络请求是async的啊...你程序先结束 call back 才回来。铁定没了...

用runloop 加个锁~
dorentus
2014-05-25 14:40:53 +08:00
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

[manager GET:@"http://www.baidu.com/"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
dispatch_semaphore_signal(semaphore);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
dispatch_semaphore_signal(semaphore);
}];

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

试试这样
dorentus
2014-05-25 14:41:40 +08:00
或者直接用 NSApplication 的 runloop
YY
2014-05-25 14:54:06 +08:00
@txx
@dorentus 在最后加了个sleep(100) 也没有输出别的东西
@dorentus 你的那个代码也没有输出
txx
2014-05-25 15:05:46 +08:00
#import <Foundation/Foundation.h>
#import "AFHTTPRequestOperationManager.h"

int main(int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...
NSLog(@"Hello, World!");
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

__block BOOL flag = YES;

[manager GET:@"http://www.baidu.com/"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
flag = NO;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
flag = NO;
}];

while (flag)
{
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
}
}
return 0;
}

这样呢?
YY
2014-05-25 15:13:31 +08:00
@txx 嗯,这样有输出了
在网上看到一种方法是加下面几句,不过这种方法好像不牢靠,多次执行,有时候会没输出,你的代码应该没这个问题。感谢!


int i = 0;
while (i < 10)
{
// This executes another run loop.
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

i++;
}
txx
2014-05-25 15:44:51 +08:00
@YY 这明显是没区别的.....
他那个一般都是控制超时的..
kobe1941
2014-05-25 20:47:21 +08:00
加断点单步调试,看看有没有执行到网络部分的代码。
NUT
2014-05-26 14:24:25 +08:00
给你的请求后面 加一个 runloop,让他别那么快就完了。
代码如下:
while(!NO){
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

}

这样写当然不严谨,你可以把 NO 换成一个 BOOL 类型的变量,当请求完成以后把这个变量致‘非’。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX