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
ivanlw
V2EX  ›  iDev

消息里面的delegate问题^纠结好久了……

  •  
  •   ivanlw ·
    tolinwei · May 21, 2012 · 3467 views
    This topic created in 5190 days ago, the information mentioned may be changed or developed.
    有一个类A(View controller类),里面有个函数a是按钮的按下时间,内容是:
    [B b]

    B是自己建的一个NSObject类,里面有个函数b(里面用到了NSXmlparser),还有NSXmlparser的3个回调函数,已经在类的头文件里面加了<NSXmlParserDelegate>

    但是在按下按钮,发送[B b]消息的时候,一直进入不了这个回调函数……
    请问是不是这样子不可以呢?有没有什么方法解决?
    13 replies    1970-01-01 08:00:00 +08:00
    jerry
        1
    jerry  
       May 21, 2012
    NSXmlparser对象指定Delegate为self了么
    ivanlw
        2
    ivanlw  
    OP
       May 21, 2012
    @jerry 嗯,有的~
    就是如果不用[B b]这种方式使用delegate,而是在一个类里直接使用的话,是能进入回调的……(特意测试了一下)

    而使用后,代码照样子copy过来的……
    ivanlw
        3
    ivanlw  
    OP
       May 21, 2012
    @jerry

    嗯~麻烦你了……我检查了好久

    A类里面调用的地方
    [SimilarityCaculation paticipleSentence:originSentence.text];
    (这个相当于[B b])

    B类里面:
    显示@interface后面加<NSXMLParserDelegate>

    然后3个回调函数:
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
    }
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
    }
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
    }

    然后是呗调用的函数b
    - (void)b
    {
    ......
    获得NSData data;
    ......
    //开始parser
    NSXMLParser *addressParser = [[NSXMLParser alloc] initWithData:data];
    [addressParser setDelegate:self];
    //[addressParser shouldResolveExternalEntities:YES];
    [addressParser parse];

    }

    在回调函数中加了断点……但是没有进去……
    jerry
        4
    jerry  
       May 21, 2012
    代码没有问题啊,你检查一下是不是你获取的NSData有问题
    altchen
        5
    altchen  
       May 21, 2012
    在b方法设置断点看下是否有进入.感觉有点像你调用的时候B对象为nil了...
    ivanlw
        6
    ivanlw  
    OP
       May 21, 2012
    @jerry 加了下面两句
    NSString *stringData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", stringData);

    能正常打印出来data……
    ivanlw
        7
    ivanlw  
    OP
       May 21, 2012
    @ivanlw 能进入b函数,一直到最后一句[addressParser parse];都能执行到,就是没进入回调……好囧啊,我以为是消息里面的函数不能进入回调呢……
    ivanlw
        8
    ivanlw  
    OP
       May 21, 2012
    @altchen 补充下,函数b声明和定义成+的方法了……
    jerry
        9
    jerry  
       May 21, 2012   ❤️ 1
    @ivanlw 类方法(+)不行,self为const Class,不是实例,在NSXMLParser里如何去调用self里的实例方法(-方法)呢? 真想用类方法你需要使用单例模式,先实例化一个单例
    altchen
        10
    altchen  
       May 21, 2012   ❤️ 1
    b是类方法,但b在里面用self是类对象,应该实例化一个对象a再[setDelegate:a]试下
    altchen
        11
    altchen  
       May 21, 2012
    额,没看到9f回了。。。。
    jerry
        12
    jerry  
       May 21, 2012
    @altchen 呵呵,发现在自己语言表达能力严重下降,看来以后需要多回帖少潜水了
    ivanlw
        13
    ivanlw  
    OP
       May 21, 2012
    自己找到问题啦……声明称+的进入不了回调函数……

    要声明成-的,然后实例化以后再调用这个方法!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3349 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 11:13 · PVG 19:13 · LAX 04:13 · JFK 07:13
    ♥ Do have faith in what you're doing.