V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
YY
V2EX  ›  iDev

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

  •  
  •   YY · 2014-05-25 14:32:40 +08:00 · 3225 次点击
    这是一个创建于 3836 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想学习下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;
    }
    第 1 条附言  ·  2014-05-26 16:18:38 +08:00
    11 条回复    2014-05-26 14:24:25 +08:00
    dorentus
        1
    dorentus  
       2014-05-25 14:37:27 +08:00   ❤️ 1
    大概是因为还来得及输出,你的程序就退出了……
    twoconk
        2
    twoconk  
       2014-05-25 14:38:52 +08:00 via Android   ❤️ 1
    从代码看木有什么问题呢
    txx
        3
    txx  
       2014-05-25 14:40:12 +08:00   ❤️ 1
    这样肯定不行啊...
    网络请求是async的啊...你程序先结束 call back 才回来。铁定没了...

    用runloop 加个锁~
    dorentus
        4
    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
        5
    dorentus  
       2014-05-25 14:41:40 +08:00
    或者直接用 NSApplication 的 runloop
    YY
        6
    YY  
    OP
       2014-05-25 14:54:06 +08:00
    @txx
    @dorentus 在最后加了个sleep(100) 也没有输出别的东西
    @dorentus 你的那个代码也没有输出
    txx
        7
    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
        8
    YY  
    OP
       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
        9
    txx  
       2014-05-25 15:44:51 +08:00
    @YY 这明显是没区别的.....
    他那个一般都是控制超时的..
    kobe1941
        10
    kobe1941  
       2014-05-25 20:47:21 +08:00   ❤️ 1
    加断点单步调试,看看有没有执行到网络部分的代码。
    NUT
        11
    NUT  
       2014-05-26 14:24:25 +08:00   ❤️ 1
    给你的请求后面 加一个 runloop,让他别那么快就完了。
    代码如下:
    while(!NO){
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

    }

    这样写当然不严谨,你可以把 NO 换成一个 BOOL 类型的变量,当请求完成以后把这个变量致‘非’。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1406 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:05 · PVG 01:05 · LAX 09:05 · JFK 12:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.