NSMutableArray然后分配replaceObjectAtIndex

时间:2014-01-25 01:28:52

标签: ios nsmutablearray

我有一个NSMutableArray,我在头文件中定义为:

@property (strong, nonatomic) NSMutableArray *tempPhotosArray;

然后我分配为:

_tempPhotosArray = [[NSMutableArray alloc] init];

我想知道的是,如果我转到replaceObjectAtIndex该程序会抱怨出界。我想在该数组中只保留一定数量的项目,那么是否可以进行插入或替换?即如果在索引0处为空,则执行插入,如果有对象已经替换它?

由于

4 个答案:

答案 0 :(得分:1)

我认为我同意哈尼·易卜拉欣。既然你说你只想在数组中保留一定数量的对象。那么你想要多少?

   // add these code when you initialize the array
   int aSetNumber = 5;

   _tempPhotosArray = [[NSMutableArray alloc] init];
   for (int i = 0; i < aSetNumber; i++)
   {
      [_tempPhotosArray addobject: [NSNull null]];
   }

我想那时你可以做任何你想做的事情,我不知道在这种情况下你想做什么,但是我会检查那个位置的对象是否是NSNUll,如果是的话,替换它,如果没有,我不知道你想要他们什么

   //use these code when you trying to insert the real object
   if([[_tempPhotoArray objectAtIndex:anIndex] isKindOfClass: [NSNull class]])
   {
        //replace it here
   }

答案 1 :(得分:1)

至于你为什么会收到错误,其他人写的都是准确的,但......

您想要的内容与NSArray的内容不符。听起来你想要一个最多5个项目的列表,并且从不超过5个。如果你试图添加第6个项目,那么“最老的”就会消失。像“最近打开”的文件历史记录。您可以使用NSArray制作此类功能,但这不是开箱即用的功能。

我建议制作自己的对象类。我不会为你编写所有代码,因为这听起来像编写家庭作业一样可疑,但我会指出你正确的方向。

FivePack&lt; - 我们的班级 NSArray *storage;&lt; - 我们存放数​​据的地方

// a public method which lets you add things.
- (void)addItem:(id)item {
    int indexOfLastItemInArrayToSave = 4;
    if (storage.length < 4)
        indexOfLastItemInArrayToSave = length-1;

    NSRange range = NSMakeRange(0, indexOfLastItemInArrayToSave);
    NSArray *temp = [storage subArrayWithRange:range];

    // now create a new array with the first item being "item" that 
    // was passed in and the rest of the array being the contents of temp.
    // Then save that to storage.
}

您想要对数据做什么以及从新对象中写一些东西取决于您,因为我不确定您是如何做到的。

答案 2 :(得分:0)

最初创建数组时,数组中没有对象,因此无需替换。

答案 3 :(得分:0)

喜欢这个吗?

if([_tempPhotosArray  count] > 0)
    //replace object
else
    //add object to array