在我的代码中,当我按下按钮打开弹出屏幕时,它应该从网站获取数据并将其存储在字符串中,然后将该字符串放入弹出屏幕上的文本视图中。当我运行程序并按下按钮进入弹出屏幕时,我收到一个SIGABRT错误" - [__ NSDictionaryI length]:无法识别的选择器发送到实例"。在研究了这个之后,我看到当你尝试将NSDictionary引用到长度方法时会出现错误。我的代码中没有NSDictionary,因此我不知道导致错误的原因。
错误消息
[76416:60b] - [ NSDictionaryI长度]:无法识别的选择器发送到 实例0x8f8ece0 2014-08-13 16:41:59.248 CWSGui [76416:60b] * 由于未捕获的异常而终止应用程序 ' NSInvalidArgumentException',原因:' - [__ NSDictionaryI长度]: 无法识别的选择器发送到实例0x8f8ece0' * 第一次抛出调用堆栈:(0 CoreFoundation 0x01c0d1e4 __exceptionPreprocess + 180 1 libobjc.A.dylib
0x0198c8e5 objc_exception_throw + 44 2 CoreFoundation
0x01caa243 - [NSObject(NSObject)doesNotRecognizeSelector:] + 275 3
CoreFoundation 0x01bfd50b ___转发_ + 1019 4 CoreFoundation 0x01bfd0ee _CF_forwarding_prep_0 + 14 5基础0x015aa4e4 - [NSConcreteAttributedString length] + 42 6基础
0x015a9a6c - [NSConcreteAttributedString initWithString:attributes:] + 182 7 UIKit 0x00d5ae9d - [UITextView setText:] + 125 8 CWSGui 0x0000805e - [SystemLog viewDidAppear:] + 686 9 UIKit 0x0076f099 - [UIViewController _setViewAppearState:isAnimating:] + 526 10 UIKit 0x0076f617 - [UIViewController viewDidAppear:] + 146 11 UIKit 0x00771014 __64- [UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:] _ block_invoke + 44 12 UIKit 0x0076f9aa - [UIViewController _executeAfterAppearanceBlock] + 63 13 UIKit 0x0066a0d0 ___afterCACommitHandler_block_invoke_2 + 33 14 UIKit
0x0066a055 _applyBlockToCFArrayCopiedToStack + 403 15 UIKit
0x00669e9a _afterCACommitHandler + 568 16 CoreFoundation
0x01bd536e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 30 17 CoreFoundation 0x01bd52bf __CFRunLoopDoObservers + 399 18 CoreFoundation 0x01bb3254 __CFRunLoopRun + 1076 19 CoreFoundation 0x01bb29d3 CFRunLoopRunSpecific + 467 20 CoreFoundation
0x01bb27eb CFRunLoopRunInMode + 123 21图形服务
0x03a3d5ee GSEventRunModal + 192 22 GraphicsServices
0x03a3d42b GSEventRun + 104 23 UIKit
0x0064cf9b UIApplicationMain + 1225 24 CWSGui
0x00008e2d main + 141 25 libdyld.dylib
0x024be701 start + 1)libc ++ abi.dylib:以uncaught结束 NSException类型的异常
查看已显示
- (void)viewDidAppear:(BOOL)animated {
NSUserDefaults *ipdefaults = [NSUserDefaults standardUserDefaults];
IPString = [ipdefaults objectForKey:@"IP"];
NSString *http = @"http://";
NSString *IPMiddle = [http stringByAppendingString:IPString];
NSString *IPFinal = [IPMiddle stringByAppendingString:@"/tasks"];
NSLog(@"Final IP: %@", IPFinal);
//array stuff from the ip
array = [[NSMutableArray alloc]init];
//make a connection
[self getIPWithIP:IPFinal];
NSString *str=@"http://example.com";
NSURL *url=[NSURL URLWithString:str];
NSData *data=[NSData dataWithContentsOfURL:url];
NSError *error=nil;
NSString *string = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&error];
NSLog(@"Your JSON Object: %@", string);
textField.text = string;
}
答案 0 :(得分:2)
您正试图获得实际为NSString
的{{1}}的长度。这可能是一些JSON解析的结果。
答案 1 :(得分:2)
[NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&error];
从不返回字符串。无论是NSArray还是NSDictionary。 (该文档仅承诺:来自数据中JSON数据的Foundation对象,如果发生错误,则为nil。因此将来可能是另一种类型。)
您的错误以
开头- [NSDictionaryI长度]:
所以在你的情况下它是一个字典(NSDictionaryI是NSDictionary的具体不可变子类)。
仅仅因为您键入变量NSString
,它不会更改分配给它的对象。