2013-11-13 2 views
0

После этого примера JSONModelJSONModel выборки JSON в виде строки

#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 моего метода локального сервера возвращает новый порядковый номер и текущую дату. NSURL *url = [NSURL URLWithString:@"http://myserver/service/api/punumber/"] return => ["13025", "11/12/2012 2:26:24 PM"] Спасибо.

+0

Если вам нужна строка, просто используйте '[[NSString alloc] initWithData: jsonData encoding: NSUTF8StringEncoding]'. –

+0

Эта линия сама по себе является синхронным вызовом, который блокирует пользовательский интерфейс, пока вы не получите ответ с сервера –

ответ

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]; 
}]; 
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]; 
    /*...*/ 
} 

Где *content является JSON NSString.

Смежные вопросы