1

我已经编写了以下代码,但我不断得到零。我已经尝试了许多不同的变体,但我失败得异常艰难。

这是我从服务器得到的。两个对象。

[{"description":"yolo.","name":"ye","id":1},{"description":"sMITH","name":"John","id":2}]

任何帮助将不胜感激......谢谢。

    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
    SBJsonParser *jsonParser = [[SBJsonParser alloc] init];
    NSArray *jsonObjects = [jsonParser objectWithData:response];
    NSMutableString *yolo = [[NSMutableString alloc] init];

            for ( int i = 0; i < [jsonObjects count]; i++ ) {
                NSDictionary *jsonDict = [jsonObjects objectAtIndex:i];
                NSString *IDID = [jsonDict objectForKey:@"id"];
                NSString *name = [jsonDict objectForKey:@"name"];

                NSLog(@"ID: %@", IDID); // THIS DISPLAYS

                [yolo appendString: IDID];    // THIS seems to be causing the new error...
                [yolo appendString:@": "];
                [yolo appendString: name];
                NSLog(@"%@", yolo);           // RETURNS NIL    
    }

编辑:

目前我的新错误是......

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSDecimalNumber 长度]:无法识别的选择器发送到实例 0x81b89f0”

4

5 回答 5

3

看起来你[jsonDict objectForKey:@"id"]是一个NSNumber(或NSDecimalNumber)而不是一个NSString。您应该将行更改NSString *IDID = [jsonDict objectForKey:@"id"];为,

id myObject = [jsonDict objectForKey:@"id"];
NSString *IDID = nil;

if ([myObject isKindOfClass:[NSNumber class]]) {
   IDID = [[jsonDict objectForKey:@"id"] stringValue];
} else {
   IDID = [jsonDict objectForKey:@"id"];
}

这个错误现在出现了,因为之前你没有初始化NSMutableString *yolo并且你appendString:在一个 nil 对象上使用。因为现在它被初始化,因为NSMutableString *yolo = [[NSMutableString alloc] init];它试图调用只接受类型作为其输入appendString的对象,当你在其中传递一个时。是一种内部调用的方法。所以你也需要改变它。NSMutableStringNSStringNSNumberlengthappendString:

于 2013-02-14T23:10:06.987 回答
2

你从不初始化yolo,所以它只是nil你调用-appendString:它的整个时间。试试这个:

NSMutableString *yolo = [NSMutableString string];
于 2013-02-14T22:40:09.440 回答
2

您是否尝试过初始化 NSMutableString?

NSMutableString *yolo = [[NSMutableString alloc] init];
于 2013-02-14T22:40:26.500 回答
1

看起来您并没有真正检查通过 JSON 提要进入您的应用程序的数据类型。当用户实际使用您的应用程序时,这可能是随机崩溃的情况。这也可能是 App Store 被拒绝的原因,是否在您的 App 审核期间发生此类崩溃。

在调用它们的方法之前,您应该检查从 JSON 接收的所有对象的类型:)

通过实施最佳实践,您将拥有一个稳定且可用的应用程序。构建数据模型以验证您的数据。你也可以像 JSONModel 这样的 JSON 数据模型框架:http: //www.jsonmodel.com/

于 2013-02-14T23:16:40.957 回答
0

从您的数据中可以明显看出,“id”不是字符串,而是数字。将指针分配给 NSString* 并不会神奇地将其转换为 NSString*。很明显,当您认为某个对象是 NSString 时,您会发现某个对象是 NSDecimalNumber。

所以:IDID​​ 是一个 NSNumber*,假装它是一个 NSString* 会导致崩溃。

于 2014-03-18T15:17:30.153 回答