【发布时间】:2012-03-01 09:08:09
【问题描述】:
我就是不明白!我有自定义类“Word”,我还通过几个步骤生成了 Word-class-objects 的 NSMutableArray:
- words = [NSMutableArray 数组];
- 对于 i = 0 到 8
- word = alloc+init;
- [words addObject: word];
- [文字发布];
然后我将单词实例传递给另一个类的设置器:
someInstance.words = words;
如果单词是非原子的,则保留属性。我这样声明 setWords 方法:
-(void)setWords:(NSMutableArray *)w {
[w retain];
[words release];
words = w;
}
当单词作为“w”变量进入方法时,它是一个对象数组,但是当我保留它并分配给我的旧值时,我的单词变量变成一个 NSMUtableArray 并且它的计数等于 w.count,但是数组的项0x0。 “=”运算符不复制数组项,我该如何解决?请帮忙,我是objective-c的新手。 我只用一种方法实例化 Word,我应该实现无参数的 init 方法吗?
-(id)initWithId:(int)Id Word:(NSString *)Word Card:(int)Card {
self.id = Id;
self.word = Word;
self.card = Card;
return self;
}
我生成 NSMutableArray 的循环:
Card *card = [[Card alloc] initWithId:[s intForColumn:@"id"] Type:[s intForColumn:@"type"] Used:[s intForColumn:@"used"]];
s = [db executeQueryWithFormat:@"SELECT w.id as id, word, card FROM word as w INNER JOIN card as c ON w.card=c.id WHERE c.id=%i ORDER BY w.id, RANDOM()", card.id];
while ([s next]) {
Word *word = [[Word alloc] initWithId:[s intForColumn:@"id"] Word:[s stringForColumn:@"word"] Card:[s intForColumn:@"card"]];
[card.words addObject:word];
[word release];
}
【问题讨论】:
-
为了理解你可以看一下截图我因为名声小没能插入帖子中:i.stack.imgur.com/UheIk.png
-
向我们展示您的子类初始化方法。
-
另一个想法是在你的setter方法中使用
words = [w mutableCopy]。 -
您能否在将它传递给 setter 之前添加用于创建此数组的确切代码?
-
@Rog:并非完全不相关;它仍然记录了 setter 的行为。
标签: objective-c ios4 nsmutablearray retain