我是Objective C的新手,我真的可以使用一些帮助。
我创建了一个名为Agent的类。 Agent类包含以下方法:
+ (Agent *)agentWithName:(NSString*)theName {
Agent *agent = [[[Agent alloc] init] autorelease];
agent.agentName = theName;
return agent;
}
然后从我的根视图控制器中我想循环遍历名称字典,为每个名称创建一个Agent对象,并将该Agent对象添加到NSMutableArray:
for (id object in dictArray) {
NSString *agentName = [object objectForKey:@"name"];
[self.myAgents addObject:[Agent agentWithName:agentName]];
}
问题在于,一旦执行[self.myAgents addObject:[Agent agentWithName:agentName]];
,NSMutableArray self.myAgents
内的所有代理对象都被调试器列为“超出范围”。当我尝试访问该数组中的对象时,这会在我的代码中导致EXC_BAD_ACCESS。对象被添加到数组中(至少它们出现在XCode调试器中)它们刚刚超出范围,但它们在退出for循环之前就超出了范围。任何人都可以解释我做错了什么?我几乎可以肯定这与我对内存管理缺乏了解有关。谢谢参观。
答案 0 :(得分:0)
我会为Agent创建一个简单的NSObject类:
// Agent.h
@interface Agent : NSObject
@property (nonatomic, copy) NSString *agentName;
- (id)initWithAgentName:(NSString *)name;
@end
// Agent.m
@implementation Agent
- (id)initWithAgentName:(NSString *)name
{
self = [super init];
if (self) {
// Custom initialization
self.agentName = name;
}
return self;
}
然后创建像:
这样的实例// Assuming dictArray contains NSDictionaries like your code implies
for (id dictionary in dictArray)
{
NSString *agentName = [dictionary objectForKey:@"name"];
Agent *agent = [[Agent alloc] initWithAgentName:agentName];
[self.myAgents addObject:agent];
}