我正在使用此代码在Twitter上搜索推文:
- (void)fetchTweets
{
NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json"];
NSDictionary *params = [NSDictionary dictionaryWithObject:@"#winning" forKey:@"q"];
TWRequest *request = [[TWRequest alloc] initWithURL:url
parameters:params
requestMethod:TWRequestMethodGET];
[request performRequestWithHandler:
^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
if (responseData) {
NSError *jsonError;
tweets =
[NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
if (tweets) {
// NSLog(@"%@", tweets);
}
else {
NSLog(@"%@", jsonError);
}
}
[[self delegate] receivedTweets];
}];
[self performSelector:@selector(fetchTweets) withObject:nil afterDelay:30];
tweets变量是一个NSArray,我试图用这段代码把它放到一个NSDictionary中:
NSDictionary *tweet = [[TwitterHandler sharedInstance].tweets objectAtIndex:indexPath.row];
我肯定会收到推文的JSON文本,但是当我尝试将它们添加到字典中以便最终将它们放入表中时,我会将“无法识别的选择器发送到实例”错误。
我不知道为什么我会得到这个,任何帮助将不胜感激。
答案 0 :(得分:2)
在此代码中:
if (responseData) {
NSError *jsonError;
tweets =
[NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
if (tweets) {
// NSLog(@"%@", tweets);
}
else {
NSLog(@"%@", jsonError);
}
tweets
与此代码相同:
[[TwitterHandler sharedInstance].tweets
如果是这样,在我看来,你将它分配给au自动释放的对象,所以最终会释放它,你最终会得到一个指向已发布对象的指针。
更好地保留它或在分配时使用保留属性。
像
这样的东西tweets =
[[NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError] retain];
或者,假设tweets
是保留orpperty:
self.tweets =
[NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
不要忘记在不再需要时释放它(至少在你班级的dealloc
中)
修改强>
好的,这就是事情,它与内存管理无关(错误的初始猜测!):我尝试了你的URL,它返回:
{"error":"You must enter a query."}
这是一本JSon字典。然后JSON Parser将其识别为字典并返回字典。您可以将它存储在NSArray *中,但实例化的对象仍然是字典,并且只响应NSDictionary方法。当您在打印时对注释显示,它会打印一个字典。
答案 1 :(得分:1)
我曾经有过这个,它是释放视图控制器的应用程序,检查你的视图控制器是否正在被释放。
答案 2 :(得分:1)
[NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
这将返回推文的NSDictionary对象。可以通过查找密钥results
中的内容来过滤掉该网址的Twitter搜索结果。
AKA:
NSDictionary *jsonTweet = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&jsonError];
NSArray *tweet = [jsonTweet objectForKey:@"results"];
然后推文就可以迭代,因为它们在NSArray中。