Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在uitableviewcell中设置来自服务器的映像路径_Ios_Uitableview_Uiimageview - Fatal编程技术网

Ios 如何在uitableviewcell中设置来自服务器的映像路径

Ios 如何在uitableviewcell中设置来自服务器的映像路径,ios,uitableview,uiimageview,Ios,Uitableview,Uiimageview,我正在制作一个应用程序,其中我正在从服务器获取数据,数据图像路径也即将到来,但当我将图像设置到tableview单元格时,应用程序将变得太重,可能b我没有正确设置图像下面是我的示例代码thanx:) 不要使用imageWithData:设置图像。它是同步的,会使你的应用程序运行缓慢 而不是那种用途 您只需执行以下操作: 将SDWebImage文件夹转储到项目中 导入UIImageView+WebCache.h 使用以下内容设置图像:sd\u setImageWithURL: 或 由。从复制的代码

我正在制作一个应用程序,其中我正在从服务器获取数据,数据图像路径也即将到来,但当我将图像设置到tableview单元格时,应用程序将变得太重,可能b我没有正确设置图像下面是我的示例代码thanx:)


不要使用
imageWithData:
设置图像。它是同步的,会使你的应用程序运行缓慢

而不是那种用途

您只需执行以下操作:

  • 将SDWebImage文件夹转储到项目中

  • 导入
    UIImageView+WebCache.h

  • 使用以下内容设置图像:
    sd\u setImageWithURL:

  • 由。从复制的代码

    首先实现以下方法

    - (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
    {
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [NSURLConnection sendAsynchronousRequest:request
                                           queue:[NSOperationQueue mainQueue]
                               completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                                   if ( !error )
                                   {
                                        UIImage *image = [[UIImage alloc] initWithData:data];
                                        completionBlock(YES,image);
                                    } else{
                                        completionBlock(NO,nil);
                                    }
                               }];
    }
    
    然后在您的
    cellforrowatinexpath

    [self downloadImageWithURL:your_url completionBlock:^(BOOL succeeded, UIImage *image) {
                if (succeeded) {
                    // change the image in the cell
                    cell.imageView.image = image;
    
    
                }
            }];
    

    不要使用
    imageWithData:
    设置图像。它是同步的,会使你的应用程序运行缓慢

    而不是那种用途

    您只需执行以下操作:

  • 将SDWebImage文件夹转储到项目中

  • 导入
    UIImageView+WebCache.h

  • 使用以下内容设置图像:
    sd\u setImageWithURL:

  • 由。从复制的代码

    首先实现以下方法

    - (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
    {
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [NSURLConnection sendAsynchronousRequest:request
                                           queue:[NSOperationQueue mainQueue]
                               completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                                   if ( !error )
                                   {
                                        UIImage *image = [[UIImage alloc] initWithData:data];
                                        completionBlock(YES,image);
                                    } else{
                                        completionBlock(NO,nil);
                                    }
                               }];
    }
    
    然后在您的
    cellforrowatinexpath

    [self downloadImageWithURL:your_url completionBlock:^(BOOL succeeded, UIImage *image) {
                if (succeeded) {
                    // change the image in the cell
                    cell.imageView.image = image;
    
    
                }
            }];
    

    首先,您正在调用dataWithContentsOfURL:函数,这将使应用程序无响应,因为您正在主线程上调用它。要使其具有响应性,您需要在YourCell中创建一个自定义单元格,并在YourCell.h中声明一个方法

    @interface YourCell : UITableViewCell
    {
        UIImage *_cImage;
    }
    
    - (void)downloadImageFromURL:(NSURL *)imageUrl;
    @end
    
    现在在你的牢房里。m你需要这样做:

    - (void)downloadImageFromURL:(NSURL *)imageUrl
    {
        if (_cImage != nil)
        {
            self.imageView.image = _cImage;
        }
        else
        {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            _cImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
    
            dispatch_sync(dispatch_get_main_queue(), ^{
                    self.imageView.image = _cImage;
                });
            });
        }
    }
    
    现在从cellForRowAtIndexPath开始:您只需要调用单元格的downloadImageFromURL:函数,并将imageUrl传递给它,然后由单元格负责下载和显示图像

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier= @"YourCell";
        YourCell *cell = (YourCell *)[self.activitiesTableView_ dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil)
        {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"YourCell" owner:self options:nil] objectAtIndex:0];
        }
    
        // Set your UILabels as before.....
    
        NSString *imagePath=[[self.inboxmessagesarray objectAtIndex:indexPath.row] objectForKey:@"offerPhoto"];
        [cell downloadImageFromURL:[NSURL URLWithString:imagePath]];
    
        return cell;        
    }
    

    如果您有任何问题,请告诉我。

    首先,您正在使用contentsofURL:函数调用数据,这将使应用程序无响应,因为您是在主线程上调用它的。要使其具有响应性,您需要在YourCell中创建一个自定义单元格,并在YourCell.h中声明一个方法

    @interface YourCell : UITableViewCell
    {
        UIImage *_cImage;
    }
    
    - (void)downloadImageFromURL:(NSURL *)imageUrl;
    @end
    
    UIImageView *img1 = (UIImageView *)[cell viewWithTag:104];
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                img1.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:img]]];
            });
        });
    
    现在在你的牢房里。m你需要这样做:

    - (void)downloadImageFromURL:(NSURL *)imageUrl
    {
        if (_cImage != nil)
        {
            self.imageView.image = _cImage;
        }
        else
        {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            _cImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
    
            dispatch_sync(dispatch_get_main_queue(), ^{
                    self.imageView.image = _cImage;
                });
            });
        }
    }
    
    现在从cellForRowAtIndexPath开始:您只需要调用单元格的downloadImageFromURL:函数,并将imageUrl传递给它,然后由单元格负责下载和显示图像

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier= @"YourCell";
        YourCell *cell = (YourCell *)[self.activitiesTableView_ dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil)
        {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"YourCell" owner:self options:nil] objectAtIndex:0];
        }
    
        // Set your UILabels as before.....
    
        NSString *imagePath=[[self.inboxmessagesarray objectAtIndex:indexPath.row] objectForKey:@"offerPhoto"];
        [cell downloadImageFromURL:[NSURL URLWithString:imagePath]];
    
        return cell;        
    }
    
    如果你有任何问题,请告诉我

    UIImageView *img1 = (UIImageView *)[cell viewWithTag:104];
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                img1.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:img]]];
            });
        });
    
    发送图像的异步请求。在图像加载之前,这样做不会阻塞UI


    发送图像的异步请求。在图像加载之前,这样做不会阻塞您的UI。

    尝试下面的代码,希望这对您有所帮助

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
     {
       __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
       if(cell==nil)
       {
          cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
       }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
    
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{     
       NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
       NSURL *url = [NSURL URLWithString:img];
       NSData * imageData = [NSData dataWithContentsOfURL:url];
       UIImage *image = [UIImage imageWithData:imageData];
    
       dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
        cell.imageView.image = image;
        cell.textLabel.text = @""; //add this update will reflect the changes 
        });
      });
     return cell;
    }
    
    编辑 为了重用下载的图像,你可以将它们保存在磁盘上,也可以只将它们保存在一些地方,例如在字典中,以便临时使用

    在下面的代码中,我使用了一个示例字典,并使用row作为键下载图像

    @interface ViewController ()
    {
        NSMutableDictionary *imagesDictionary; //lets declare a mutable dictionary to hold images 
    }
    
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
         __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
        if(cell==nil)
        {
           cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
        }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       __block NSString *row = [NSString stringWithFormat:@"%d",indexPath.row]; //add this
    
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       // valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
       if(![[imagesDictionary allKeys] containsObject:row]) //if image not found download and add it to dictionary
       {
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
           // NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
            NSURL *url = [NSURL URLWithString:img];
            NSData * imageData = [NSData dataWithContentsOfURL:url];
            UIImage *image = [UIImage imageWithData:imageData];
    
            dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
                 [imagesDictionary setObject:image forKey:row]; //sorry, while editing to your code i forgot to add this 
                cell.imageView.image = image;
                cell.textLabel.text = @""; //add this update will reflect the changes
                 NSLog(@"loading and addig to dictionary");
            });
        });
      }
      else
      {
        cell.imageView.image = [imagesDictionary objectForKey:row];
        NSLog(@"retriving from dictioary");
      }
      return cell;
    }
    
    在这个方法中,只需初始化它

    - (void)viewDidLoad {
        [super viewDidLoad];
        // rest of your code
        //...........
        //
        imagesDictionary = [[NSMutableDictionary alloc]init]; //initilise 
     }
    
    在索引中,此方法只需将下载的图像作为键添加到对应行的字典中

    @interface ViewController ()
    {
        NSMutableDictionary *imagesDictionary; //lets declare a mutable dictionary to hold images 
    }
    
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
         __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
        if(cell==nil)
        {
           cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
        }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       __block NSString *row = [NSString stringWithFormat:@"%d",indexPath.row]; //add this
    
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       // valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
       if(![[imagesDictionary allKeys] containsObject:row]) //if image not found download and add it to dictionary
       {
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
           // NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
            NSURL *url = [NSURL URLWithString:img];
            NSData * imageData = [NSData dataWithContentsOfURL:url];
            UIImage *image = [UIImage imageWithData:imageData];
    
            dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
                 [imagesDictionary setObject:image forKey:row]; //sorry, while editing to your code i forgot to add this 
                cell.imageView.image = image;
                cell.textLabel.text = @""; //add this update will reflect the changes
                 NSLog(@"loading and addig to dictionary");
            });
        });
      }
      else
      {
        cell.imageView.image = [imagesDictionary objectForKey:row];
        NSLog(@"retriving from dictioary");
      }
      return cell;
    }
    

    试试下面的代码,希望对你有所帮助

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
     {
       __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
       if(cell==nil)
       {
          cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
       }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
    
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{     
       NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
       NSURL *url = [NSURL URLWithString:img];
       NSData * imageData = [NSData dataWithContentsOfURL:url];
       UIImage *image = [UIImage imageWithData:imageData];
    
       dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
        cell.imageView.image = image;
        cell.textLabel.text = @""; //add this update will reflect the changes 
        });
      });
     return cell;
    }
    
    编辑 为了重用下载的图像,你可以将它们保存在磁盘上,也可以只将它们保存在一些地方,例如在字典中,以便临时使用

    在下面的代码中,我使用了一个示例字典,并使用row作为键下载图像

    @interface ViewController ()
    {
        NSMutableDictionary *imagesDictionary; //lets declare a mutable dictionary to hold images 
    }
    
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
         __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
        if(cell==nil)
        {
           cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
        }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       __block NSString *row = [NSString stringWithFormat:@"%d",indexPath.row]; //add this
    
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       // valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
       if(![[imagesDictionary allKeys] containsObject:row]) //if image not found download and add it to dictionary
       {
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
           // NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
            NSURL *url = [NSURL URLWithString:img];
            NSData * imageData = [NSData dataWithContentsOfURL:url];
            UIImage *image = [UIImage imageWithData:imageData];
    
            dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
                 [imagesDictionary setObject:image forKey:row]; //sorry, while editing to your code i forgot to add this 
                cell.imageView.image = image;
                cell.textLabel.text = @""; //add this update will reflect the changes
                 NSLog(@"loading and addig to dictionary");
            });
        });
      }
      else
      {
        cell.imageView.image = [imagesDictionary objectForKey:row];
        NSLog(@"retriving from dictioary");
      }
      return cell;
    }
    
    在这个方法中,只需初始化它

    - (void)viewDidLoad {
        [super viewDidLoad];
        // rest of your code
        //...........
        //
        imagesDictionary = [[NSMutableDictionary alloc]init]; //initilise 
     }
    
    在索引中,此方法只需将下载的图像作为键添加到对应行的字典中

    @interface ViewController ()
    {
        NSMutableDictionary *imagesDictionary; //lets declare a mutable dictionary to hold images 
    }
    
      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
         __block  tablecellTableViewCell *cell= [self.activitiesTableView_ dequeueReusableCellWithIdentifier:tableviewidentifier];
        if(cell==nil)
        {
           cell = [[tablecellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableviewidentifier];
        }
       if(indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1)
       {
          // [[cell textLabel] setText:@"Load more records"];
       }
       __block NSString *row = [NSString stringWithFormat:@"%d",indexPath.row]; //add this
    
       UILabel *valuedate = (UILabel *)[cell viewWithTag:21];
       UILabel *msg = (UILabel *)[cell viewWithTag:22];
       UILabel *date = (UILabel *)[cell viewWithTag:23];
       UILabel *time = (UILabel *)[cell viewWithTag:24];
       // valuedate.text=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerTitle"];
       msg.text=@"How are you?";
       if(![[imagesDictionary allKeys] containsObject:row]) //if image not found download and add it to dictionary
       {
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
           // NSString *img=[[self.inboxmessagesarray objectAtIndex:indexPath.row]objectForKey:@"offerPhoto"];// here i am getting image path
            NSURL *url = [NSURL URLWithString:img];
            NSData * imageData = [NSData dataWithContentsOfURL:url];
            UIImage *image = [UIImage imageWithData:imageData];
    
            dispatch_sync(dispatch_get_main_queue(), ^{ //in main thread update the image
                 [imagesDictionary setObject:image forKey:row]; //sorry, while editing to your code i forgot to add this 
                cell.imageView.image = image;
                cell.textLabel.text = @""; //add this update will reflect the changes
                 NSLog(@"loading and addig to dictionary");
            });
        });
      }
      else
      {
        cell.imageView.image = [imagesDictionary objectForKey:row];
        NSLog(@"retriving from dictioary");
      }
      return cell;
    }
    


    除了这个还有别的选择吗?但我建议SDWebImage。它被广泛使用,易于理解。任何其他内置选项??非常有用的库。。Thnx除此之外还有其他选项吗?但我建议SDWebImage。它被广泛使用,易于理解。任何其他内置选项??非常有用的库。。Thnx请您也提到行indexpath方法的单元格好吗?@MishalAwan函数已添加到帖子中。@MishalAwan如果您觉得帖子有用,请投赞成票。谢谢。请您也提到行indexpath方法的单元格好吗?@MishalAwan函数已添加到帖子中。@MishalAwan如果您觉得帖子有用,请投赞成票。谢谢这是为了什么?上面的代码可以用于发送异步请求,不像您使用的发送同步请求的代码。发送同步请求会完全阻塞UI,直到下载整个图像。比方说,如果您的internet速度较慢,则会加载除图像之外的整个ui(如果您使用Async request)。什么是fromimage.image it id在我这边出现错误?这是为了什么?上面的代码可用于发送异步请求,而不是发送同步请求的代码。发送同步请求会完全阻塞UI,直到下载整个图像。比方说,如果您的internet速度较慢,则会加载整个ui,如果您使用异步请求,则会加载除图像之外的所有图像。而什么是fromimage.image it id在我这边给出错误?NSString*img的值是多少。添加一个作为参考,您可以从NSLog中获得。检查我编辑的答案。。NSString*img的值是多少。添加一个作为参考,您可以从NSLog获得。检查我编辑的答案。评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。