在获取 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)以在单击按钮时显示