【问题标题】:NSArray value to NSString [closed]NSArray 值到 NSString [关闭]
【发布时间】:2013-07-03 18:24:35
【问题描述】:

我在 ViewDidLoad 中有一个这样声明的 NSArray animalz = [NSArray arrayWithObjects:@"rabbit",@"deer",@"ox", @"horse", @"cow", nil]; 我写了一个 UIView 子类,它接受一个 NSString 并重新排列它。用户按下一个按钮,与该按钮关联的数字是我需要的数组中的数字(例如,如果数字是 3,那么我需要值“horse”,但如果按钮是 4,那么我需要“cow” ");目前这些数字以 long int 的形式出现,我无法在 nsarray 中获得相应的值。我试着做:

    selectedani //this is the long int that represents the button
    int indexani = [animalz objectAtIndex:selectedani];
    NSString *anistr = [NSString stringWithFormat:@"%i",indexani];
    [self rearrange:btistr];

这不会给我任何编译器警告或错误,但是当我按下按钮时,应用程序会崩溃。我做错了什么,我该如何解决?

【问题讨论】:

  • 崩溃时的调用堆栈是什么?调试器控制台的输出是什么?
  • 这是完全错误的:` int indexani = [animalz objectAtIndex:selectedani];` objectAtIndex 将始终返回一个对象指针(或 nil)。
  • @AdamRosenfield 错误是:线程 1:程序接收到的信号:EXC_BAD_ACCESS

标签: ios nsstring nsarray


【解决方案1】:
selectedani //this is the long int that represents the button
NSString *anistr = [animalz objectAtIndex:selectedani];
[self rearrange:anistr];

【讨论】:

  • 我试过了,我的应用又崩溃了。我收到错误“线程 1:程序收到信号:EXC_BAD_ACCESS”
  • 你做了什么来调试崩溃?您是否在代码中设置断点并单步执行此代码以查看是否通过?
  • 好吧,当我只有 long int 时,它工作正常。只有当我尝试访问数组时它才不起作用。
  • @user2510806 - 它不适用于 int。它可能不会崩溃,但仍然无法正常工作。
【解决方案2】:

animalzNSString 对象的数组,但是当您调用 [animalz objectAtIndex:selectedani] 时,会将结果分配给 int。

【讨论】:

  • 我该如何解决这个问题?
【解决方案3】:

首先,您在使用之前是否分配了selectedani?如果不是,那么你不应该使用 selectedani。它可能是内存位置或按钮的其他属性,可能会有所不同。

[animalz objectAtIndex:selectedani]

返回一个对象,将此对象转换为 int 不是您想要的,当然它也不是索引。

你能做什么?为对应的按钮动态分配标签号,如

button.tag = 1;//or something like it

然后在 IBAction 方法中检索标签并使用它来解析您的数组。

- (IBAction)buttonPressed:(id)sender
{
  UIButton *pressedBtn = (UIButtton *)sender;
  NSString *anistr = [animalz objectAtIndex:pressedBtn.tag];

  //do what you want to do with the string
  [self rearrange:anistr];
}

在这种情况下,将 animalz 声明为 iVar 或属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多