- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Objective-C 中处理简单的 JSON 请求时遇到了问题。当我尝试执行代码时,它给了我这个错误:
2015-08-11 12:11:15.552 WordADay[11482:1877243] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x7fa4d8e87270> valueForUndefinedKey:]: this class is not key value coding-compliant for the key text.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010c01bc65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010bcb4bb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010c01b8a9 -[NSException raise] + 9
3 Foundation 0x000000010b8da82a -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 226
4 Foundation 0x000000010b833b23 -[NSObject(NSKeyValueCoding) valueForKey:] + 251
5 WordADay 0x000000010b7823f2 -[ViewController getNewWord] + 1442
6 WordADay 0x000000010b781e09 -[ViewController viewDidLoad] + 73
7 UIKit 0x000000010c5451d0 -[UIViewController loadViewIfRequired] + 738
8 UIKit 0x000000010c5453ce -[UIViewController view] + 27
9 UIKit 0x000000010c460289 -[UIWindow addRootViewControllerViewIfPossible] + 58
10 UIKit 0x000000010c46064f -[UIWindow _setHidden:forced:] + 247
11 UIKit 0x000000010c46cde1 -[UIWindow makeKeyAndVisible] + 42
12 UIKit 0x000000010c410417 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2732
13 UIKit 0x000000010c41319e -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
14 UIKit 0x000000010c412095 -[UIApplication workspaceDidEndTransaction:] + 179
15 FrontBoardServices 0x000000010ebd55e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
16 CoreFoundation 0x000000010bf4f41c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
17 CoreFoundation 0x000000010bf45165 __CFRunLoopDoBlocks + 341
18 CoreFoundation 0x000000010bf44f25 __CFRunLoopRun + 2389
19 CoreFoundation 0x000000010bf44366 CFRunLoopRunSpecific + 470
20 UIKit 0x000000010c411b02 -[UIApplication _run] + 413
21 UIKit 0x000000010c4148c0 UIApplicationMain + 1282
22 WordADay 0x000000010b782aaf main + 111
23 libdyld.dylib 0x000000010e5bf145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
当我不尝试执行这个奇怪的 JSON 请求时,它执行得很好......但是当我这样做时,它会抛出该错误。我想知道我应该做什么...这是 JSON 请求背后的代码:
//
// ViewController.m
// WordADay
//
// Created by Lucas Steuber on 8/11/15.
// Copyright (c) 2015 Lucas Steuber. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *word;
@property (weak, nonatomic) IBOutlet UILabel *definition;
@end
@implementation ViewController
- (IBAction)newWord:(id)sender {
[self getNewWord];
}
- (IBAction)moreInfo:(id)sender {
}
- (void)viewDidLoad {
[super viewDidLoad];
[self getNewWord];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)getNewWord {
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"dictionary" ofType:@"txt"];
NSString *fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSArray *values = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSUInteger randomIndex = arc4random() % [values count];
NSString *word = values[randomIndex];
NSString *urlp1 = @"http://api.wordnik.com:80/v4/word.json/";
NSString *urlp2 = @"/definitions?limit=1&includeRelated=true&sourceDictionaries=wiktionary&useCanonical=false&includeTags=false&api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5";
NSURL *wordnik = [NSURL URLWithString: [NSString stringWithFormat: @"%@%@%@", urlp1, word, urlp2]];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:wordnik
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30];
// Fetch the JSON response
NSData *urlData;
NSURLResponse *response;
NSError *error;
NSError *jsonArrayError;
NSString *desc;
// Make synchronous request
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: urlData options: NSJSONReadingMutableContainers error: &jsonArrayError];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", jsonArrayError);
} else {
NSArray *items = [jsonArray objectAtIndex:0];
for (NSDictionary *item in items){
desc = [item valueForKey:@"text"];
}
}
self.word.text = word;
self.definition.text = desc;
}
@end
我对 Objective-C 还很陌生,到目前为止我还不太喜欢它。
编辑:这是我正在解析的 JSON:
[{"textProns":[],"sourceDictionary":"wiktionary","exampleUses":[],"relatedWords":[],"labels":[],"citations":[],"word":"hello","partOfSpeech":"interjection","attributionText":"from Wiktionary, Creative Commons Attribution/Share-Alike License","attributionUrl":"http://creativecommons.org/licenses/by-sa/3.0/","text":"A greeting (salutation) said when meeting someone or acknowledging someone’s arrival or presence.","score":0.0}]
最佳答案
您的 JSON 是一个包含一个字典的数组。但是您的代码采用了不同的结构。以下应符合实际数据格式:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: urlData options: NSJSONReadingMutableContainers error: &jsonArrayError];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", jsonArrayError);
} else {
for (NSDictionary *item in jsonArray){
desc = item[@"text"];
}
}
但是遍历一个字典是没有意义的,所以它可以简化为:
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: urlData options: NSJSONReadingMutableContainers error: &jsonArrayError];
if (!jsonArray) {
NSLog(@"Error parsing JSON: %@", jsonArrayError);
} else {
NSDictionary *item = [jsonArray firstObject];
desc = item[@"text"];
}
另请注意,您不应使用 valueForKey:
从 NSDictionary
中获取值。使用 objectForKey:
或现代语法(就像我在此处的代码中所做的那样)。
关于ios - Objective-C 中的 SIGBRT 错误,可能来自尝试的 JSON 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950141/
说真的,你怎么能在不发疯的情况下处理所有这些异常呢?我是不是读了太多关于异常处理的文章或什么?我尝试重构了几次,但每次似乎都以更糟糕的结果告终。也许我应该承认确实会发生异常(exception)情况,
背景 两者 try/rescue和 try/catch是 Elixir 中的错误处理技术。根据 corresponding chapter在介绍指南中。 Errors can be rescued u
每当我尝试在 Raspberry PI 上运行此 python 脚本时,我都会遇到问题: import socket import sys # Create a TCP/IP socket sock
我想知道一些关于 PHP 的 try , catch声明。 让我们考虑以下示例。 abstract class ExceptionA extends Exception {} class Except
我的 laravel v5.4 项目中有两个模型,user 和 admin。 在 config/auth.php 中,我向守卫和提供者添加了管理员,如下所示: 'guards' => [ 'w
try: r = requests.get(url, params={'s': thing}) except requests.ConnectionError, e: print e
我有以下代码。 但是,它并不能捕获所有错误,而我仍然会收到“throw er;//未处理的'错误'事件”。 为什么是这样? app.post('/api/properties/zip/:zip/bed
问题与细节 我正在使用自定义错误处理,遇到的错误之一是“路径中的非法字符”。我有一个自定义函数,旨在通过路径字符串查找此类非法字符,并在找到它们时引发自定义错误。但是我发现,取决于非法字符,Test-
This question already has answers here: How do I catch a numpy warning like it's an exception (not j
我正在使用其他人的代码,但我不熟悉try/catch,因此我举了一个类似的小例子。在第11行上,如果我写了error(''),似乎没有发现错误并增加了索引j。但是,编写error(' ')或error
我在我的一个程序中遇到了这个问题,在这种情况下,尝试/异常(exception)的错误使程序变得更好,以防用户意外输入了他们不应该输入的内容。它仍然给我错误,我为为什么感到困惑。如果对我的问题确实很重
我在尝试TRY ... CATCH块时遇到问题。有人可以解释为什么以下代码无法执行我的sp吗? DECLARE @Result int SET @Result = 0 BEGIN TRY SE
我有一个相当大的 powershell 脚本,其中包含许多(20 多个)执行各种操作的函数。 现在所有代码实际上都没有任何错误处理或重试功能。如果某个特定的任务/功能失败,它就会失败并继续。 我想改进
为什么我尝试时需要导入 inputmismatchException catch(InputMismatchException e){ System.out.println("
我对此感到困惑 - 我为辅助方法编写了一个 try/catch 。它的目的是捕获任何无效输入(任何不是“男性”或“女性”的内容(没有特定情况)。如果输入无效,它将通知用户,然后让他们重试。如果有效,则
我有时会发现自己处于如下场景。尽可能简单地陈述问题 “有时我会创建一段代码,Java 让我将其包含在 try/catch 语句中。我没有使用 catch,所以我将其留空。为什么这是错误的?” boo
我有点困惑为什么当我不使用 Try block 时会出现 Try block 错误。 我在代码块底部附近收到错误通知。如果我不使用 try/catch,有人可以向我解释为什么会发生这种情况吗? 它是否
我已经盯着我的电脑两个小时了,我不知道我做错了什么。谁能帮助我看到光明? package blackjack; import java.util.Random; import java.util.Sc
我想将方法保存在 Enum 中,但 Class.getDeclaredMethod 抛出 NoSuchMethodException,那么我该如何处理呢?我的代码: public enum Car
这个问题已经有答案了: Executing multi-line statements in the one-line command-line (18 个回答) 已关闭 3 年前。 如何使用try.
我是一名优秀的程序员,十分优秀!