하나의 객체에 REST 연결 모델을 저장하려고하므로 반복해서 사용하지 않아도됩니다.iPhone 응용 프로그램에서 반복적 인 코드를 단순화하기 위해 사용자 정의 NSObject 클래스를 사용하는 데 문제가 있습니다.
//RestModel.h
#import "ASIHTTPRequest.h"
@interface RestModel : NSObject{
NSString* _baseUrl;
NSString* _modelUrl;
}
@property (nonatomic, retain) NSString* modelUrl;
- (id)initWithModel:(NSString*)model;
- (NSDictionary*)getById:(NSInteger*)ident;
- (NSDictionary*)getAll;
@end
//RestModel.m
#import "RestModel.h"
@implementation RestModel
@synthesize modelUrl = _modelUrl;
- (id)init
{
self = [super init];
if (self) {
_baseUrl = @"http://myRESTurl.com";
}
return self;
}
- (id)initWithModel:(NSString*)model
{
self = [super init];
if (self) {
_baseUrl = @"http://myRESTurl.com";
self.modelUrl = [NSString stringWithFormat:@"%@/%@/", _baseUrl, model];
}
return self;
}
- (NSDictionary*)HTTPRequest:(NSURL*)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if(!error){
NSData *responseData = [request responseData];
NSString *errorDesc = nil;
NSPropertyListFormat format;
[error release];
[request release];
return (NSDictionary*)[NSPropertyListSerialization propertyListFromData:responseData mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
}else{
NSLog(@"%@", error);
return nil;
}
}
- (NSDictionary*)getById:(NSInteger*)ident
{
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", self.modelUrl, ident]];
return [self HTTPRequest:url];
}
- (NSDictionary*)getAll
{
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", self.modelUrl]];
return [self HTTPRequest:url];
}
- (void)dealloc
{
[_modelUrl release];
// [_responseData release];
// [_responseDict release];
[super dealloc];
}
@end
편집 : 지금은 충돌하는 것이 아니라, 내 로컬있는 NSDictionary 0 나는 내 컨트롤러에 -viewDidLoad에 다음 전화 드렸습니다의 수 있습니다 여기에 내가 만든 모델이다
RestModel* rm = [[RestModel alloc] initWithModel:@"user"];
self.dict = [rm getAll];
[rm release];
[self.dict count]의 NSLog를 컨트롤러 전체에 설치했습니다. 그것은 항상 0입니다. RestModel rm이 호출되고 함수가 호출됩니다 (다시 NSLog). 데이터는 없습니다. 어떤 아이디어?
좋아, 지금은 충돌하지 않지만 NSDictionary는 비어 있습니다. -viewDidLoad에서로드하고 심지어 내 NSDictionary -tableView : tableView numberOfRowsInSection : 섹션의 개수에 대한 NSLog를 넣고 0이 나온다. RestModel을 해제하지 않아야합니까? 이것은 -viewDidLoad에서로드하는 방법입니다. RestModel * rm = [[RestModel alloc] initWithModel : @ "user"]; self.dict = [rm getAll]; [rm release]; – rnystrom
릴리스 중입니다. HTTPRequest 메서드에 로그인 해보십시오 ... – Macmade
신경 쓰지 마세요. 카운트 문제는 내 자신의 잘못 이었어. 너 락. – rnystrom