Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 按钮';s来自url的图像-等待10秒后返回失败。主运行循环模式:KCFRUnlopDefaultMode_Ios_Objective C_Json_Url - Fatal编程技术网

Ios 按钮';s来自url的图像-等待10秒后返回失败。主运行循环模式:KCFRUnlopDefaultMode

Ios 按钮';s来自url的图像-等待10秒后返回失败。主运行循环模式:KCFRUnlopDefaultMode,ios,objective-c,json,url,Ios,Objective C,Json,Url,我有一个包含json格式的URL { "name":"RAI Radiodue", "cat":"Adult Contemporary", "img":"http://www.rai.it/dl/portaleRadio/images/ico_radio2.jpg", "url":"http://www.listenlive.eu/rai2.m3u" }, { "name":"RAI Radiotre", "ca

我有一个包含json格式的URL

{
      "name":"RAI Radiodue",
      "cat":"Adult Contemporary",
      "img":"http://www.rai.it/dl/portaleRadio/images/ico_radio2.jpg",
      "url":"http://www.listenlive.eu/rai2.m3u"
   },
   {
      "name":"RAI Radiotre",
      "cat":"Classical/Culture",
      "img":"http://www.rai.it/dl/portaleRadio/images/ico_radio3.jpg",
      "url":"http://www.listenlive.eu/rai3.m3u"
   }........etc
我尝试使用以下代码显示许多单选按钮:

    for (int i = 0;  i<[namesArray count]; i++) {

        NSURL *url = [NSURL URLWithString: [pictureUrl objectAtIndex:i]];

        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImageView *subview = [[UIImageView alloc] init];
        [subview setImage:[UIImage imageWithData:data]];



        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];

        int xxx = i%3;
        int yyy = i/3.0f;
        [bt setFrame:CGRectMake(35+95*xxx, 15+100*yyy, 60, 60)];
        [bt setBackgroundImage:subview forState:UIControlStateNormal];

        bt.tag = 200+i;
        bt.selected = NO;
        [bt.layer setMasksToBounds:NO];
        [bt.layer setShadowColor:[UIColor blackColor].CGColor];
        [bt.layer setShadowOpacity:0.8f];
        [bt.layer setShadowOffset:CGSizeMake(1.0f, 1.0f)];
        [bt addTarget:self action:@selector(Play:) forControlEvents:UIControlEventTouchUpInside];
        [mainscroll addSubview:bt];
}
我该怎么办

NSData *data = [NSData dataWithContentsOfURL:url]; 
此行阻塞主线程,主线程在运行此行之前等待数据加载:

UIImageView *subview = [[UIImageView alloc] init];
[subview setImage:[UIImage imageWithData:data]];

您必须在其他线程中运行下载数据,并在下载数据时设置映像。

pictureUrl阵列可能有问题,或者您在运行代码时没有internet连接。当我运行代码时,传入您在帖子中显示的2个字符串,代码运行良好

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *stringsArray = @[@"http://www.rai.it/dl/portaleRadio/images/ico_radio2.jpg", @"http://www.rai.it/dl/portaleRadio/images/ico_radio3.jpg"];
    [self downloadImagesFromNamesArray:stringsArray];

}

-(void)downloadImagesFromNamesArray:(NSArray *) namesArray {
    for (int i = 0;  i<[namesArray count]; i++) {

        NSURL *url = [NSURL URLWithString: [namesArray objectAtIndex:i]];

        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [UIImage imageWithData:data];

        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];

        int xxx = i%3;
        int yyy = i/3.0f;
        [bt setFrame:CGRectMake(35+95*xxx, 15+100*yyy, 60, 60)];
        [bt setBackgroundImage:img forState:UIControlStateNormal];

        bt.tag = 200+i;
        bt.selected = NO;
        [bt.layer setMasksToBounds:NO];
        [bt.layer setShadowColor:[UIColor blackColor].CGColor];
        [bt.layer setShadowOpacity:0.8f];
        [bt.layer setShadowOffset:CGSizeMake(1.0f, 1.0f)];
        [bt addTarget:self action:@selector(Play:) forControlEvents:UIControlEventTouchUpInside];
        [self.mainscroll addSubview:bt];
    }
}
-(void)viewDidLoad{
[超级视图下载];
NSArray*stringsArray=@[@”http://www.rai.it/dl/portaleRadio/images/ico_radio2.jpg", @"http://www.rai.it/dl/portaleRadio/images/ico_radio3.jpg"];
[从NamesArray自下载图像:stringsArray];
}
-(void)从namesArray下载ImagesFromNamesArray:(NSArray*)namesArray{

对于(int i=0;ii)如果您记录url(在循环的第一行之后),它是否为您提供了正确的url?此外,在使用setBackgroundImage:forState:的行中,您传递的是一个UIImageView,而不是一个不正确的UIImage。NSURL*url=[NSURL URLWithString:[pictureUrl objectAtIndex:i]];=它返回正确的url,但NSData*data=[NSData dataWithContentsOfURL:url];没有。我使用了dispatch_async。在第一个块中,我从url获取数据,在第二个块中,我设置了映像。现在我的问题是:新的视图控制器存在,但应用程序好像没有网络连接。您是否尝试使用类似asyncImageView的东西?:并且尝试只使用数据制作一个按钮?对于第一个选项:sam第二个问题,当它到5号线的时候,它从街区出去了。
- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *stringsArray = @[@"http://www.rai.it/dl/portaleRadio/images/ico_radio2.jpg", @"http://www.rai.it/dl/portaleRadio/images/ico_radio3.jpg"];
    [self downloadImagesFromNamesArray:stringsArray];

}

-(void)downloadImagesFromNamesArray:(NSArray *) namesArray {
    for (int i = 0;  i<[namesArray count]; i++) {

        NSURL *url = [NSURL URLWithString: [namesArray objectAtIndex:i]];

        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [UIImage imageWithData:data];

        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];

        int xxx = i%3;
        int yyy = i/3.0f;
        [bt setFrame:CGRectMake(35+95*xxx, 15+100*yyy, 60, 60)];
        [bt setBackgroundImage:img forState:UIControlStateNormal];

        bt.tag = 200+i;
        bt.selected = NO;
        [bt.layer setMasksToBounds:NO];
        [bt.layer setShadowColor:[UIColor blackColor].CGColor];
        [bt.layer setShadowOpacity:0.8f];
        [bt.layer setShadowOffset:CGSizeMake(1.0f, 1.0f)];
        [bt addTarget:self action:@selector(Play:) forControlEvents:UIControlEventTouchUpInside];
        [self.mainscroll addSubview:bt];
    }
}
-(void) downloadImagesFromNamesArray:(NSArray *) imageURLStrings {
    static int count = 0;
    NSString *urlString = imageURLStrings[count];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
    [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError) {
            NSLog(@"%@", connectionError);
            count ++;
            if (count < imageURLStrings.count) {
                [self downloadImagesFromNamesArray:imageURLStrings];
            }
        }else{
            UIImage *img = [UIImage imageWithData:data];
            if (img) {
                UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];

                int xxx = count%3;
                int yyy = count/3.0f;
                [bt setFrame:CGRectMake(35+95*xxx, 15+100*yyy, 60, 60)];
                [bt setBackgroundImage:img forState:UIControlStateNormal];

                bt.tag = 200+ count;
                bt.selected = NO;
                [bt.layer setMasksToBounds:NO];
                [bt.layer setShadowColor:[UIColor blackColor].CGColor];
                [bt.layer setShadowOpacity:0.8f];
                [bt.layer setShadowOffset:CGSizeMake(1.0f, 1.0f)];
                [bt addTarget:self action:@selector(Play:) forControlEvents:UIControlEventTouchUpInside];
                [self.mainscroll addSubview:bt];
            }else{
                NSLog(@"Data was received but no image was created from the data");
            }

            count ++;
            if (count < imageURLStrings.count) {
                [self downloadImagesFromNamesArray:imageURLStrings];
            }
        }
    }];
}