0

按照这个 JSONModel 的例子

#import "CountryModel.h"
...

NSString* json = (fetch here JSON from Internet) ... 
NSError* err = nil;
CountryModel* country = [[CountryModel alloc] initWithString:json error:&err];

我这样模仿

// 这里是类#import "JSONModel.h"

@interface OrderNumberModel : JSONModel
@property (strong, nonatomic) NSString* OrderNumber;
@property (strong, nonatomic) NSString* OrderDate;

@end


NSString* json = (fetch here JSON from Internet) ... 

NSError* err = nil;
OrderNumberModel *order = [[OrderNumberModel alloc] initWithString:result error:&err];

NSLog(@"Order Number: %@ Order Date: %@", order.OrderNumber, order.OrderDate);

如果类 init 方法是 initWithString 我怎样才能获取 json 作为字符串?我见过的大多数例子都是 NSData。我的本地服务器方法的 url 返回一个新的 orderNumber 和当前日期。NSURL *url = [NSURL URLWithString:@"http://myserver/service/api/punumber/"]返回 =>["13025","11/12/2013 2:26:24 PM"] 谢谢。

4

2 回答 2

0

您的服务器不返回对象(而是字符串列表) - 因此您无法使用模型类解析响应。

如果服务器返回例如:

{"OrderNumber":"13025", "OrderDate":"11/12/2013 2:26:24 PM"}

那么你可以使用你的模型类来解析它,因为 JSONModel 可以将 JSON 键名与你的类属性名匹配:

@interface OrderNumberModel : JSONModel
@property (strong, nonatomic) NSString* OrderNumber;
@property (strong, nonatomic) NSString* OrderDate;
@end

但是因为你的服务器只返回两个字符串,没有键你不能让它们自动映射到模型类。

你可以做的是使用 JSONModel 的内置 HTTP 客户端。

#import "JSONModel+networking.h"

[JSONHTTPClient getJSONFromURLWithString:@"your URL as string"
    completion:^(id json, JSONModelError *err) {
        NSArray* array = (NSArray*)json;
        NSString* orderNr = array[0];
        NSString* orderDate = array[1];
}];
于 2013-11-13T08:16:04.017 回答
0

我曾经用 来做到这一点NSURLRequest,您需要将其称为:

theURL = [[NSURL URLWithString:@"http://myserver.com/json/method"] retain]; 
NSURLRequest *request = [NSURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:60.0];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

然后在你的控制器中实现委托方法,重要的东西在这里:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSString *content = [[[NSString alloc] initWithBytes:[responseData bytes] length:[responseData length] encoding:NSUTF8StringEncoding] autorelease];
    /*...*/
}

*contentJSON NSString在哪里。

于 2013-11-13T00:17:42.890 回答