Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Iphone 单击UIBarButtonim后刷新视图_Iphone_Objective C_Xcode_Uiview - Fatal编程技术网

Iphone 单击UIBarButtonim后刷新视图

Iphone 单击UIBarButtonim后刷新视图,iphone,objective-c,xcode,uiview,Iphone,Objective C,Xcode,Uiview,我的导航栏上有一个刷新按钮 buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)]; self.navigationItem.rightBarButtonItem = buttonItem; -(void)buttonItemClicked{ NSLog

我的导航栏上有一个刷新按钮

buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)];
    self.navigationItem.rightBarButtonItem = buttonItem;
-(void)buttonItemClicked{
    NSLog(@"buttonItemclicked");
    myView.labelName.text = nil;
    myView.otherLabelName.text = nil;
    [spinner startAnimating]
    [spinnerView setHidden:NO];
    [self requestAPI];
    [spinner stopAnimating];
    [spinnerView setHidden:YES];
  }
如果我进出视野,效果很好。但是当我在buttonItemClicked中调用相同的方法时,它不起作用。我还尝试在action方法中调用view方法,但这也不起作用

我试图做的是将我的标签设置为nil,添加我的
UIActivityIndicatorView
并在再次设置标签后将其删除

我已经尝试过[self.view setNeedsDisplay]

刷新它本身可以工作,但动画无法工作


有什么建议吗?

试试
[myView设置需要显示]

动画不起作用,因为您使用相同的方法调用startAnimating和stopAnimating(和setHidden)。 渲染将在方法调用结束时开始。 你需要设置

[spinner stopAnimating];
[spinnerView setHidden:YES];
requestAPI

编辑:

使用大中央调度。比如:

- (void)buttonItemClicked {
  myView.labelName.text = nil;
  myView.otherLabelName.text = nil;
  [spinner startAnimating]
  [spinnerView setHidden:NO];
  [self requestAPI];
}

- (void)requestAPI {
  dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSURL *url = [NSURL URLWithString:@"http://example.com"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *stringResult = [[NSString alloc] initWithData:data
                                                   encoding:NSUTF8StringEncoding];
    dispatch_async(dispatch_get_main_queue(), ^{
      [spinner stopAnimating];
      [spinnerView setHidden:YES];

      myView.labelName.text = stringResult;
    });

  });
}

@Sinetris如果将“我的标签”设置为“零”并启动动画,则在我的动作方法中效果良好,即动画。如果我调用requestAPI,动画就不起作用。不知道是什么原因造成了这种情况。@Magnus requestAPI做了什么?如果您从web获取数据(或者您的方法运行几秒钟),您需要另一个线程(请参阅Grand Central Dispatch for“simplified”线程和AsittpRequest for async web调用)。我从web服务获取数据,并将得到的响应放入UILabels中。但是我不太明白为什么它在我的视图方法中有效,而在我的uibarbuttonite操作方法中无效。@Sinetris我尝试在我的操作方法中启动一个新线程,它工作得很好。唯一的问题是我在控制台中得到了很多东西,比如:uu NSAutoreleaseNoPool():NSCFString类的对象0xaa23f20在没有池的情况下自动释放-只是泄漏。知道我该如何处理这个问题吗?@Magnus添加了一个使用GCD的示例(需要iOS>=4.0)