我的 Cocoa 项目中有一组对象。如果对象具有与传入值匹配的属性,则应将对象保存到新数组中,该数组是方法的返回值。这看起来很简单,但我看到了一些奇怪的行为。这是方法:
- (NSMutableArray*)tagAttributeRectsForID:(NSString*)nodeID
{
NSMutableArray * resultArray = [NSMutableArray array];
for (NSDictionary * line in self.lineInfoForTap) {
NSMutableArray * glyphRects = [line valueForKey:@"GlyphRects"];
for (NSDictionary * rectDict in glyphRects) {
if ([rectDict valueForKey:nodeID]) {
CGRect thisRect = CGRectFromString([rectDict valueForKey:nodeID]);
if (thisRect.size.width > 0) {
[resultArray addObject:NSStringFromCGRect(thisRect)];
}
}
}
glyphRects = nil;
}
return resultArray;
}
发生的情况是,取决于导致一组匹配的行对象的数量,这就是我在返回数组中获得完整结果集的次数。换句话说,我希望样本结果如下所示:
2013-04-16 19:38:37.665 Vorpal[18523:c07] (
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}"
)
但相反,我得到了这个:
2013-04-16 19:38:37.665 Vorpal[18523:c07] (
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}",
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}"
)
如果有三行的匹配结果,我将返回三组数据。
我不禁认为我错过了一些关于我编写此方法的方式的非常基本的内容,但经过数小时的凝视之后,我已经准备好认输并问朋友了。你是那个朋友,匿名的 SO 读者吗?我可以用一个朋友。:-(