在获取 json 响应时显示一个按钮,该按钮等于 @"unapproved" 之类的字符串

Posted

技术标签:

【中文标题】在获取 json 响应时显示一个按钮,该按钮等于 @"unapproved" 之类的字符串【英文标题】:show a button on getting json response equal to a string like @"unapproved" 【发布时间】:2016-06-03 06:00:52 【问题描述】:

我在这里从 API 获取一些剪辑。我想在剪辑的状态未获批准时显示一个按钮,因此在 json 响应中,目前我为“未批准”显示“0”。所以现在想在时显示一个按钮 状态为“0”。我只从堆栈中获得了以下代码,并且工作正常 [park enumerateObjectUsingBlock ..] 我得到的响应状态等于“1”和一些剪辑“0”。但是我的代码在 NSSring *title 之后不起作用,它显示标题为 nil 所以告诉我如何获取 *title 中的值

 // log debugger response -- park=(__NSArrayM) *    @"3 objects"    
                         [0]    (MyVideos *)  
 //  _clip_name=(NSTaggedPointerString) *   @"Kotak1"       
 // _state=(NSTaggedPointerString) *    @"1"    
 // _clip_image_path=(__NSCFString *)@"1EKNA1464617788.jpg" 

 // status = (NSString *)nil     

 NSURL *url = [NSURL URLWithString:@"task=webapi.getJClips"];

 park = [jsonLoader videosFromJSONFile:url];

[park enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) 

 // if i add a breakpoint at above line and on this line it give me response state = "1" but on below line it crashes

 //here it crashes on below line in debugger it shows title nil

  NSString *title = object[@"state"];

  

  // here below is code for showing hidden button after getting response "0" 

if ([title isEqual:@"0"]) 

        //If so, get the correct button from the enumerate idk and set hidden NO and text = title
  //      UIButton *button = [buttonArray objectAtIndex:idx];
   //     button.hidden = NO;
    //    button.text = title;
    

【问题讨论】:

您至少需要显示park的JSON或日志 在开始的代码部分是我的 json 响应 _clip 名称和 _state @wain 【参考方案1】:
    您在块内声明 NSString *title,因此这在块外不起作用。 if([title isEqual:@"0"]) 是比较对象指针,应该是 if([title isEqualToString:@"0"]),比较一个 NSString 和另一个 NSString 由于块是独立运行的,所以在“if([title...”行执行之前不会设置你的标题 UI 操作必须在主线程上运行

所以,毕竟,更好的方法是:

[park enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) 
    if([object[@"state"] isEqualToString:@"0"]) 
        dispatch_async(dispatch_get_main_queue(), ^
            UIButton *button = [buttonArray objectAtIndex:idx];
            button.hidden = NO;
            button.text = title;

        );
    

【讨论】:

你不知道这不是在主线程上运行的,并且枚举没有被推送到后台线程,但除此之外+1 代码不起作用...应用程序崩溃并给出错误 --- [MyVideos objectForKeyedSubscript:]: unrecognized selector sent to instance it crash at if([object[@"state"] isEqualToString:@ "0"]) 行@Dominic 请帮帮我...@ Dominic 您可能必须将 object[@"state"] 结果转换为 NSString,如果没有看到您的数据,很难确定应用程序期望什么。解决问题的“快速而肮脏”的方法是: NSString *stateString = object[@"state"]; if([stateString isEqualToString:@"0"]) @Dominic: isEqual: 不执行指针比较;它的工作原理与isEqualToString: 一样好(即不考虑 Unicode 规范化形式之类的东西,但在其他方面工作正常)。

以上是关于在获取 json 响应时显示一个按钮,该按钮等于 @"unapproved" 之类的字符串的主要内容,如果未能解决你的问题,请参考以下文章

从单选按钮输入单击时显示模式

获取 BootstrapVue 下拉菜单(b-dropdown)以在单击按钮时显示

在操作按钮单击时显示 selectInput 和 sliderInput 值

单击按钮时显示 jquery 数据表模式对话框不起作用

单击按钮时显示网络图像

Cloudinary:如何在按钮单击时显示最高分辨率的图像?