1

好的,我是 Objective C 的新手,我正在努力自己学习它,而不会打扰堆叠的溢出社区,但它与我习惯的(C++)完全不同。

但是我遇到了一个我一生都无法弄清楚的问题,我相信这将是一件愚蠢的事情。但我正在从一个网站提取问题和答案,然后使用此代码在我的 iOS 应用程序上显示。

NSString * GetUrl = [NSString stringWithFormat:@"http://www.mywebpage.com/page.php"];
NSString * GetAllHtml = [NSString stringWithContentsOfURL:[NSURL URLWithString:GetUrl] encoding:1 error:nil];

NSString *PullWholeQuestion = [[GetAllHtml componentsSeparatedByString:@"<tr>"] objectAtIndex:1];
NSString *FinishWholeQuestion = [[PullWholeQuestion componentsSeparatedByString:@"</tr>"] objectAtIndex:0];

在获得所有网页信息后,我删除了每个问题,并希望将其设置为执行循环过程以提取问题的位置,因此基本上我需要计算 FinishedWholeQuestion 变量有多少个数组选项

我在网上找到了这个片段,它似乎与那里的例子一起工作,但我不能重复它

NSArray *stringArray = [NSArray arrayWithObjects:@"1", @"2", nil];
NSLog(@"count = %d", [stringArray count]);
4

1 回答 1

3

" componentsSeparatedByString" 返回一个 NSArray 对象,而不是单个 NSString。

一个数组对象可以包含零个、一个或多个 NSString 对象,具体取决于输入。

如果您将“FinishWholeQuestion”更改为 NSArray 对象,您可能会得到一些组件(由字符串分隔)。

现在我正在更仔细地查看您的代码,我看到您正在假设您的数组始终有效(并且有超过 2 个条目,如“ objectAtIndex: 1”位所示)。

您还应该更改所有 Objective-C 变量的第一个字符。Objective-C 中的最佳实践是变量的第一个字符应该总是小写。

像这样:

NSString * getUrl = [NSString stringWithFormat:@"http://www.mywebpage.com/page.php"];
NSString * getAllHtml = [NSString stringWithContentsOfURL:[NSURL URLWithString:getUrl] encoding: NSUTF8StringEncoding error:nil];

NSArray * allQuestions = [getAllHtml componentsSeparatedByString:@"<tr>"];
if([allQuestions count] > 1)
{
    // assuming there is at least two entries in this array
    NSString * pullWholeQuestion = [allQuestions objectAtIndex: 1];
    if(pullWholeQuestion)
    {
        NSString *finishWholeQuestion = [[pullWholeQuestion componentsSeparatedByString:@"</tr>"] objectAtIndex:0];
    }
}
于 2013-06-16T04:02:12.230 回答