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

2012-05-21 00:00:06 +08:00
 ivanlw
有一个类A(View controller类),里面有个函数a是按钮的按下时间,内容是:
[B b]

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

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

而使用后,代码照样子copy过来的……
ivanlw
2012-05-21 16:05:12 +08:00
@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
2012-05-21 17:15:38 +08:00
代码没有问题啊,你检查一下是不是你获取的NSData有问题
altchen
2012-05-21 17:40:32 +08:00
在b方法设置断点看下是否有进入.感觉有点像你调用的时候B对象为nil了...
ivanlw
2012-05-21 19:25:54 +08:00
@jerry 加了下面两句
NSString *stringData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", stringData);

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

要声明成-的,然后实例化以后再调用这个方法!

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

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

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

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

© 2021 V2EX