我在对象中有一个NSMutableArray。 在对象方法中,我做了类似这样的事情:
/* ... */
[[LRResty client] get:connectURL withBlock:^(LRRestyResponse *r) {
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonResponse = [jsonParser objectWithString:[r asString]];
NSDictionary *permittedBases= [jsonResponse objectForKey:@"permittedBases"];
Database *database = [[Database alloc] init];
for (id key in permittedBases) {
/* ... */
[workingDatabases addObject:database];
}
}];
return workingDatabases;
在返回行,我的数组中没有对象(不再)。我知道“数据库”对象超出范围这一事实。但是我将它们保存在数组中。
我在监督什么吗?
如果有任何帮助,这里是头文件:
@class Database;
@interface CommunicationHelper : NSObject {
NSMutableArray *workingDatabases;
}
// The function where the problem appears:
- (NSMutableArray *)getDatabasesForWebsite:(Website *)websiteIn;
@property(nonatomic,copy) NSMutableArray *workingDatabases;
@end
答案 0 :(得分:1)
我认为这是因为[LRResty client] get:
是异步的。在连接完成时,即在返回调用之后调用该块。
//Called first
[[LRResty client] get:connectURL
//Called second
return workingDatabases;
//Called later when the connection is finished
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonResponse = [jsonParser objectWithString:[r asString]];
NSDictionary *permittedBases= [jsonResponse objectForKey:@"permittedBases"];
Database *database = [[Database alloc] init];
for (id key in permittedBases) {
/* ... */
[workingDatabases addObject:database];
}
Ajeet也有一个有效点,确保您的阵列已初始化。
答案 1 :(得分:1)
在使用该数组之前,只需在某处分配您的workingDatabases(Mutable数组)。
分配后,它会正常工作。
答案 2 :(得分:1)
我使用LRResty框架来访问RESTful Web服务。无论如何这是一件奇怪的事情,所以我改用了一种功能更丰富的框架,称为“ASIHTTP”。我建议那些想在iOS上使用RESTful服务(以及更多)的人