【问题标题】:trouble using NSMUtableArray in UITableView在 UITableView 中使用 NSMUtableArray 的麻烦
【发布时间】:2011-09-16 12:16:19
【问题描述】:

我有一个NSMutableArray * nameCatalog,其中包含一对namesurls(name, url)

如果我像这样在viewDidLoad 中显示nameCatalog

for (Catalogue *o in nameCatalog){
        NSLog(@"Catalog: %@", o.url);
    }

我得到以下链接,很好:

接下来我想将NSMutableArray * nameCatalog 作为内容放到表格中。我实现了以下内容:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSURL *url=[NSURL URLWithString:[[nameCatalog objectAtIndex:indexPath.row] valueForKey:@"url"]];
     NSLog(@"the clicked url:%@", url);

}

所以当我点击表格的第一行时,它将显示第一个 url....第二个等等。

当我点击first row 时,会显示这个

这是正确的。

当我点击 second row 时,它会显示:

这也是正确的。

当我点击third row 时,它会显示:

 (null)

这是错误的!

我哪里出错了?

与第三个链接包含french e这一事实有关吗?

coupé这个词中。

重要提示:

以上是为了简单起见,为了让每个人都清楚,我假设我的NSMutableArray 仅包含 3 个网址。

实际上它包含更多,大约 20 个 url。除了包含 french e 的 url 之外,一切都很好。当我单击表中的那些行时 NSLog 显示 null

我确定我的NSMutableArray 包含这些链接。请告诉我如何解决这个问题?

【问题讨论】:

    标签: iphone xcode uitableview nsmutablearray


    【解决方案1】:

    您的第三个字符串包含可能在 url 中无效的“é”字符 - 尝试使用 -stringByAddingPercentEscapesUsingEncoding: NSString 中的函数为该字符添加百分比转义:

    NSString *escapedString = [[[nameCatalog objectAtIndex:indexPath.row] valueForKey:@"url"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url=[NSURL URLWithString:escapedString];
    

    【讨论】:

    • 这听起来像是一个很好的解决方案,但为时已晚 - NSURL 可能已经从包含法语的字符串创建。 OP 应该尝试转义 before 从字符串创建 NSURL。
    • @Danra,他有 url 的字符串,NSURL 是在 didSelectRowAtIndexPath: 方法中创建的,所以看起来还不算晚
    • @Vladimir 更好但并不完美。它显示了网址,但我得到的是 coup%C3%A9 而不是 coupé。那么接下来呢?:D
    • @george,要向用户显示任何内容,请使用您已经拥有的带有适当符号的字符串。当尝试使用 nsurl 加载某些内容时 - 使用转义字符串,该字符串并不打算显示给用户。 coup%C3%A9 和 coupé 一样,只是使用适当的编码使其成为有效的 url 字符串
    【解决方案2】:
    use this it work fine   
     NSArray *array=[[NSArray alloc] initWithObjects:@"link",@"link",@"link",nil];
            for(int i=0;i<[array count];i++){
                NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)[array objectAtIndex:i], NULL, CFSTR("?=&+"), kCFStringEncodingUTF8);
                NSURL *url=[NSURL URLWithString:result];
                NSLog(@"the clicked url:%@", url);
                NSLog(@"%@",[array objectAtIndex:i]);
            } 
    

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2016-08-13
      • 2011-02-11
      • 2020-05-06
      • 2021-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多