NSMutableArray insertObject atIndex 问题

Posted

技术标签:

【中文标题】NSMutableArray insertObject atIndex 问题【英文标题】:NSMutableArray insertObject atIndex issues 【发布时间】:2011-05-31 03:37:54 【问题描述】:

这个网站上有很多关于添加到 NSMutableArray 的示例,我看过很多,但我仍然不理解(很有可能)或者缺少一些基本的东西。

我正在尝试通过 for 循环添加到 NSMutableArray。我想使用按钮标签作为键/索引来跟踪按钮 x,y 坐标位置,以便在用户单击按钮时更改按钮。这一切都没有IB。

我的初始化如下:

self.tmpXpos = [[NSMutableArray alloc] init]; self.tmpYpos = [[NSMutableArray alloc] init];

[self.tmpXpos insertObject:[NSNull null] atIndex:0];

[self.tmpYpos insertObject:[NSNull null] atIndex:0]; **我在阅读了有关“创建”数组并用 null 填充它之后添加了这些内容。

在循环中:

NSUInteger btag = button.tag; //NSUInterger 根据帮助

>>NSNumber *xNumber = [NSNumber numberWithInteger:[self xpos]]; // NSNumber as an Object wrapper
>>NSNumber *yNumber = [NSNumber numberWithInteger:[self ypos]];


>>[self.tmpXpos insertObject:xNumber atIndex:btag];
>>[self.tmpYpos insertObject:yNumber atIndex:btag];

NSLog(@"%d, %@, %@",btag,xNumber,yNumber);

日志条目看起来不错:

2,64,0

3,128,0

等每个按钮添加到屏幕。

在调试期间 - tmpXpos 和 tmpYpos 在 self 下列为“0 Objects”。

我这样检索信息:

NSUInteger tmpSt = [self.sTags integerValue];

NSNumber *tmpX = [self.tmpXpos objectAtIndex:tmpSt];

NSNumber *tmpY = [self.tmpYpos objectAtIndex:tmpSt];

int tmpPositionX = [tmpX intValue];

int tmpPositionY = [tmpY intValue];

NSLog(@"%d, %d",tmpPositionX, tmpPositionY);

NSLog 产生 0, 0

我非常感谢大家可能提出的任何指导或问题,因为该网站的“健全性检查”过去曾拯救过我的培根。

我目前还忽略了内存泄漏,但它们在我的脑海中。那里不用担心。 具有讽刺意味的是,我还有几个其他的数组工作得很好,但例外是它们不是通过循环填充的。

最后,代码可以正常工作,因为位置 0,0 的按钮确实会根据设计进行更改,LOL,但对于任何其他位置都没有。

再次感谢!

尼尔

【问题讨论】:

【参考方案1】:

我认为您的问题是您正在使用方法 numberWithInteger 创建 NSNumbers,而 NSUInteger 实际上是一个无符号长整数。所以试试

xNumber = [NSNumber numberWithUnsignedLong:[self xpos]];

【讨论】:

好主意,但没有奏效。对象 self.xpos 的内容也只是一个整数,这给了我尝试“numberWithInteger”的想法但是“numberWithUnsignedLong”并没有改变数组内容:0 Objects via self in debug. 这很适合我,所以我想我要对日志文件中的坐标进行下注和硬编码! 哦,等等,我刚刚查看了您检索信息的方式,您将整数转换为无符号长整数。 NSUInteger tmpSt = [self.sTags integerValue]; 另外,当您说您的 init 方法时,您的意思是该代码在您的类中的实际 init 方法中,因为如果是这样,除非您在其他地方分配该类的实例,否则不会调用该方法. @user397313 - 完全正确,我确实在 -loadView 下做到了。我的其他数组是通过这种方法实例化的并且工作正常。我只需要找到一种不使用循环来填充数组的方法..有什么想法吗?【参考方案2】:

森林答案的树木。我想用一个数量填充一个数组,但是,该数组期望该数量是数字序列。我的数据没有任何“空白”,但也不是按顺序排列的;即,1,2,3,6,7,12 等。因此,正如 user397313 帮助我看到的那样,NSDictionary 是使用这种数据的方法。

【讨论】:

以上是关于NSMutableArray insertObject atIndex 问题的主要内容,如果未能解决你的问题,请参考以下文章

将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults

访问另一个 NSMutableArray 中的对象的 NSMutableArray(即嵌套对象访问)

在过滤另一个 NSMutableArray 的基础上过滤 NSMutableArray

从 NSData 的 NSMutableArray 转换为 NSString 的 NSMutableArray?

如何使用 NSPredicate 从另一个 NSMutableArray 中过滤 NSMutableArray

NSMutableArray基本概念