" - [__ NSDictionaryI length]:无法识别的选择器发送到实例"没有NSDictionary的错误?

时间:2014-08-13 21:13:02

标签: ios objective-c cocoa-touch

在我的代码中,当我按下按钮打开弹出屏幕时,它应该从网站获取数据并将其存储在字符串中,然后将该字符串放入弹出屏幕上的文本视图中。当我运行程序并按下按钮进入弹出屏幕时,我收到一个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;
 } 

2 个答案:

答案 0 :(得分:2)

您正试图获得实际为NSString的{​​{1}}的长度。这可能是一些JSON解析的结果。

答案 1 :(得分:2)

[NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&error];

从不返回字符串。无论是NSArray还是NSDictionary。 (该文档仅承诺:来自数据中JSON数据的Foundation对象,如果发生错误,则为nil。因此将来可能是另一种类型。)

您的错误以

开头
  

- [NSDictionaryI长度]:

所以在你的情况下它是一个字典(NSDictionaryI是NSDictionary的具体不可变子类)。

仅仅因为您键入变量NSString,它不会更改分配给它的对象。