在iPhone应用程序中使用自定义NSObject类简化重复代码时遇到问题

在iPhone应用程序中使用自定义NSObject类简化重复代码时遇到问题,iphone,objective-c,ios,nsdictionary,Iphone,Objective C,Ios,Nsdictionary,我试图将REST连接模型存储在单个对象中,这样就不必反复使用它。以下是我创建的模型: //RestModel.h #导入“ASIHTTPRequest.h” @接口模型:NSObject{ NSString*_baseUrl; NSString*\u modelUrl; } @属性(非原子,保留)NSString*modelUrl; -(id)initWithModel:(NSString*)模型; -(NSDictionary*)getById:(NSInteger*)标识; -(NSDict

我试图将REST连接模型存储在单个对象中,这样就不必反复使用它。以下是我创建的模型:

//RestModel.h
#导入“ASIHTTPRequest.h”
@接口模型:NSObject{
NSString*_baseUrl;
NSString*\u modelUrl;
}
@属性(非原子,保留)NSString*modelUrl;
-(id)initWithModel:(NSString*)模型;
-(NSDictionary*)getById:(NSInteger*)标识;
-(NSDictionary*)getAll;
@结束
//RestModel.m
#导入“RestModel.h”
@实现REST模型
@合成modelUrl=\u modelUrl;
-(id)init
{
self=[super init];
如果(自我){
_baseUrl=@”http://myRESTurl.com";
}
回归自我;
}
-(id)initWithModel:(NSString*)模型
{
self=[super init];
如果(自我){
_baseUrl=@”http://myRESTurl.com";
self.modelUrl=[NSString stringWithFormat:@“%@/%@/”,_baseUrl,model];
}
回归自我;
}
-(NSDictionary*)HTTPRequest:(NSURL*)url
{
ASIHTTPRequest*request=[AsiHttpRequestWithURL:url];
[请求启动同步];
n错误*错误=[请求错误];
如果(!错误){
NSData*responseData=[request responseData];
NSString*errorDesc=nil;
NSPropertyListFormat格式;
[错误释放];
[请求释放];
return(NSDictionary*)[NSPropertyListSerialization propertyListFromData:responseData可变选项:NSPropertyListMetableContainersandLeaves格式:&格式错误描述:&错误描述];
}否则{
NSLog(@“%@”,错误);
返回零;
}
}
-(NSDictionary*)getById:(NSInteger*)标识
{
NSURL*url=[NSURL URLWithString:[NSString stringWithFormat:@“%@/%@”,self.modelUrl,ident]];
返回[self-HTTPRequest:url];
}
-(NSDictionary*)getAll
{
NSURL*url=[NSURL URLWithString:[NSString stringWithFormat:@“%@”,self.modelUrl]];
返回[self-HTTPRequest:url];
}
-(无效)解除锁定
{
[_modelUrl发布];
//[_响应数据发布];
//[_响应命令发布];
[super dealoc];
}
@结束
编辑:现在它没有崩溃,但我的本地NSDictionary的计数为0。我正在我的控制器中调用以下in-viewDidLoad:

RestModel*rm=[[RestModel alloc]initWithModel:@“user”];
self.dict=[rm getAll];
[rm发布];

我在整个控制器中植入了[self.dict count]的NSLog。它总是0。调用RestModel rm,调用函数(再次调用更多NSLog),但不调用数据。有什么想法吗?

NSInteger不是一个对象,因此不需要使用NSInteger*传递它,当然您也不想使用%@格式说明符。相反,请尝试以下方法:

    - (NSDictionary*)getById:(NSInteger)ident
    {
        NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%d", self.modelUrl, ident]];
        return [self HTTPRequest:url];
    }

NSInteger不是对象,因此不需要使用NSInteger*传递它,当然您也不想使用%@格式说明符。相反,请尝试以下方法:

    - (NSDictionary*)getById:(NSInteger)ident
    {
        NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%d", self.modelUrl, ident]];
        return [self HTTPRequest:url];
    }
这些应该是自动释放的对象,因为它们是通过方便的方法获得的,所以显式地释放它们会使应用程序崩溃


这些应该是自动释放的对象,因为它们是通过方便的方法获得的,所以显式释放它们会使应用程序崩溃。

这是正确的,即使用户提供的示例中没有使用getById。谢谢。是的,它不能解决我的整体问题,但我还是新手,所以这些东西很有用!这是真的,即使在用户提供的示例中没有使用getById。谢谢。是的,它不能解决我的整体问题,但我还是新手,所以这些东西很有用!好的,它现在没有崩溃,但是我的字典是空的。我在-viewdiload加载,甚至把我的NSDictionary-tableView:tableView numberOfRowsInSection:section的计数放在NSLog中,结果是0。我不应该发布RestModel吗?这就是我在-viewDidLoad:RestModel*rm=[[RestModel alloc]initWithModel:@“user”中加载它的方式;self.dict=[rm getAll];[rm发布];没关系,你搞定了!计数问题是我自己的错。你太棒了。好吧,它现在没有崩溃,但我的字典是空的。我在-viewdiload加载,甚至把我的NSDictionary-tableView:tableView numberOfRowsInSection:section的计数放在NSLog中,结果是0。我不应该发布RestModel吗?这就是我在-viewDidLoad:RestModel*rm=[[RestModel alloc]initWithModel:@“user”中加载它的方式;self.dict=[rm getAll];[rm发布];没关系,你搞定了!计数问题是我自己的错。你太棒了。