Ios Twitter提要未显示完整tweet
因此,我正在制作一个应用程序,其中一部分在表视图中显示用户的tweet。然而,有些tweet出现了一些问题,例如它只显示单个字符,如(“)或表情符号。例如,如果tweet显示:Ios Twitter提要未显示完整tweet,ios,xml,xcode,twitter,Ios,Xml,Xcode,Twitter,因此,我正在制作一个应用程序,其中一部分在表视图中显示用户的tweet。然而,有些tweet出现了一些问题,例如它只显示单个字符,如(“)或表情符号。例如,如果tweet显示: RT@jakemillermusic:每个人都上传你今天在ustream中拍摄的照片,并注明“跟随@jakemillermusic#jakemiller” 当与NSLog一起显示时,它会打印: 2013-04-03 00:34:30.476 ParsingXMLTutorial[3308:c07]RT@jakemill
RT@jakemillermusic:每个人都上传你今天在ustream中拍摄的照片,并注明“跟随@jakemillermusic#jakemiller”
当与NSLog一起显示时,它会打印:
2013-04-03 00:34:30.476 ParsingXMLTutorial[3308:c07]RT@jakemillermusic:每个人都上传你今天在ustream上拍摄的照片并加上标题 2013-04-03 00:34:30.476 ParsingXMLTutorial[3308:c07] 2013-04-03 00:34:30.477 ParsingXMLTutorial[3308:c07]跟随@jakemillermusic#jakemiller 2013-04-03 00:34:30.478 ParsingXMLTutorial[3308:c07]
下面是我用来获取XML格式的URL:
以下是解析代码:
-(id) loadXMLByURL:(NSString *)urlString
{
_tweets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//string = [string stringByReplacingOccurrencesOfString:@" " withString:@""]; // space
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; // newline
string = [string stringByReplacingOccurrencesOfString:@"\t" withString:@""];
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"status"])
{
currentTweet = [Tweet alloc];
isStatus = YES;
}
if ([elementname isEqualToString:@"user"])
{
isStatus = NO;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"created_at"])
{
currentTweet.dateCreated = currentNodeContent;
}
if ([elementname isEqualToString:@"text"])
{
currentTweet.content = currentNodeContent;
}
}
if ([elementname isEqualToString:@"status"])
{
[self.tweets addObject:currentTweet];
currentTweet = nil;
currentNodeContent = nil;
}
}
@end
我建议如下几点修改
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSString *value=[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet];
if(currentNodeContent == nil){
currentNodeContent = [[NSMutableString alloc] initWithString:value];
}else
[currentNodeContent appendString:value];
}
而在didEnd中
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"created_at"])
{
currentTweet.dateCreated = currentNodeContent;
}
if ([elementname isEqualToString:@"text"])
{
currentTweet.content = currentNodeContent;
}
}
if ([elementname isEqualToString:@"status"])
{
[self.tweets addObject:currentTweet];
currentTweet = nil;
//currentNodeContent = nil; REMOVED
}
currentNodeContent = nil; // PUT OUTSIDE
}
问题是您必须在方法foundCharacters中追加字符串,因为解析器不会一次返回标记之间的所有字符串
最后,您应该在didEnd方法中全局设置currentNodeContentnil,因为您也在其他文本中使用它
以上希望有助于..将解析代码放在那里@iphone