【问题标题】:iPhone:How to make an integer array and store values in Obj-C?iPhone:如何在 Obj-C 中创建一个整数数组并存储值?
【发布时间】:2010-06-06 18:39:27
【问题描述】:

我想知道一个简单的事情,但我无法得到它是我想动态地将 10 个值存储在一个整数数组中,然后我必须检查存储的值并与当前值进行比较是否相同或不在其他情况下。最初我尝试了相同的 C 数组 int temp[10],但似乎无法设置和获取方法,然后我尝试了 NSNumber,如下所示,

在 AppDelagate 文件中,

    NSMutableArray *reqID;
@property (nonatomic,readwrite) 
NSMutableArray * reqID;

@synthesize reqID;

........................

........................

........................

在其他文件中,

int rd = (1+arc4random() % [arr count]);

[myDelegate.reqID addObject:[NSNumber numberWithUnsignedInteger:rd]];

那我需要检查一下,

        for (int i=0; i<10; i++)
    {
        NSUInteger anInt = [[myDelegate.reqID objectAtIndex:i] unsignedIntegerValue];

        if ( anInt==rd )
        {
            rd = (1+arc4random() % [arr count]);
            break;
        }
    }

但它没有按预期工作,即数组值没有给出正确的值。我不知道如何在 Obj-C 中使用整数数组并处理它以供以后访问等。

有人可以解释一下吗?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    正如埃米尔指出的那样,

    myDelegate.reqID = [NSMutableArray arrayWithCapacity:10];
    

    不会给你一个包含 10 个插槽的数组,它会给你一个空数组,提示运行时你最终将在其中放入 10 个东西。所以,如果你在添加 10 个对象之前从 0 到 9 运行你的循环,你会得到一个 NSRangeException,因为你会跑到数组的末尾。

    【讨论】:

      【解决方案2】:

      首先,你应该像这样声明属性:

      @property (nonatomic,retain) NSMutableArray * reqID;
      

      其次,您需要在某处实际创建一个 NSMutableArray。例如:

      myDelegate.reqID = [NSMutableArray arrayWithCapacity:10];
      

      请注意,您必须使用myDelegate.reqID 而不是reqID,以便保留对象。

      (我个人会在这里使用普通的 C 数组...)

      编辑:完成后记得做[reqID release]

      编辑 2: 以下是如何使用 C 数组执行此操作:

      在你的类中,添加一个实例变量int *reqID。然后声明一个属性:

      @property (nonatomic, assign) int *reqID;
      

      然后为您的数组分配空间,请执行以下操作:

      myDelegate.reqID = malloc(10 * sizeof(int));
      

      然后要访问您的数组,您可以使用 [] 语法:

      int a = myDelegate.reqID[i];
      

      然后当你完成后,做:

      free(myDelegate.reqID);
      

      【讨论】:

      • 我按照您的建议修改了所有内容。但是我在读取下面的 mutablearray 变量时崩溃了。我补充说,myDelegate.reqID = [NSMutableArray arrayWithCapacity:10];在 AppDelegate 文件中的 DidFinishLaunching。在另一个文件中,我试图像下面这样访问它: for (int i=0; i
      • 我之前评论中的小修正。我添加了“prevquesid = = [NSMutableArray arrayWithCapacity:10];”在 AppDelegate 文件 DidFinishLaunching 中,而不是我之前评论中的那个。
      • 崩溃时收到的信息是什么?是不是 EXC_BAD_ACCESS?
      • [myDelegate.prevquesid objectAtIndex:i] 将崩溃,因为数组为空并且在 i=0 处没有任何内容(进入 for 循环时 i 的值)
      • 嗨,我已经通过使用 NSNumber 填充数组值来解决它。对于 ex 初始化为 0:prevquesid = [ [NSMutableArray alloc] initWithCapacity:10]; for (int i=0;i
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多