存储数组

时间:2011-05-08 16:38:43

标签: objective-c

我试图将数组假设中的字符串结果存储到myArray中 我做错了吗?

myArray = [NSString stringWithFormat:@"%@", hypothesis];

更新

NSMutableArray *myArray
NSMutableArray *urArray
// this is where my words are converted into strings. e.g. if I said "HELLO"
- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis{

        if (x==1){
        // I am trying to store "HELLO" into myArray for comparison later.
        myArray = [NSString stringWithFormat:@"%@", hypothesis];
        // this would print "HELLO"
        self.textview.text = [NSString stringWithFormat:@"You said %@",hypothesis];
        }
        else {
            urArray = [NSString stringWithFormat:@"%@", hypothesis];
        }
}
这基本上就是这样。之后我会在ifelse语句中比较myArray == urArray。

4 个答案:

答案 0 :(得分:2)

...试

myArray = [NSArray arrayWithObject:[NSString stringWithFormat:@"%@", hypothesis]];

答案 1 :(得分:1)

是的,你做错了几件事。

你有一个方法 -pocketsphinxDidReceiveHypothesis 你已经定义为采用 NSString * 类型的单个参数,该参数被称为假设

在你的问题中你说

  

我试图存储一个结果   数组假设中的字符串

这表明您知道假设是一个数组,但我们无法验证这一点,因为您没有显示该段代码。

假设必须是String或Array。它不可能是两者,你不能不确定。

如果假设是一个字符串,即。如果你这样做:

NSString *input = @"Hello World";
[foo pocketsphinxDidReceiveHypothesis: input];

然后这两行毫无意义: -

NSMutableArray *myArray = [NSString stringWithFormat:@"%@", hypothesis];
NSMutableArray *urArray = [NSString stringWithFormat:@"%@", hypothesis];

因为,好好看..

NSString *hypothesis = @"Hello World";
newString = [NSString stringWithFormat:@"%@", hypothesis];

此代码不执行任何操作,假设和newString完全相同,因为您甚至没有为格式提供任何参数。 [NSString stringWithFormat:@"%@", hypothesis]与使用hypothesis没什么区别。所以你实际拥有的是

NSString *hypothesis;
NSMutableArray *myArray = hypothesis;
NSMutableArray *urArray = hypothesis;

这已经破了,你不能给一个数组分配一个字符串(好吧,我相当肯定你不是无意义)。要使用数组,您必须使用多种数组创建方法来为您提供数组。 String不是一个数组,不能伪装成一个。

现在,如果假设不是String但是实际上是一个数组(如果你已经展示了这段代码,它会有所帮助)。如果它是一个数组,即。你做这样的事情......

NSArray *input = [NSArray arrayWithObject:@"Hello World"];
[foo pocketsphinxDidReceiveHypothesis: input];

然后您的方法定义被破坏,因为您已将其定义为采用String参数

- (void)pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis

当你需要它来获取一个数组参数

 - (void)pocketsphinxDidReceiveHypothesis:(NSArray *)hypothesis

然后以下两行没有意义: -

NSMutableArray *myArray = [NSString stringWithFormat:@"%@", hypothesis];
NSMutableArray *urArray = [NSString stringWithFormat:@"%@", hypothesis];

[NSString stringWithFormat:@"%@", hypothesis][hypothesis description]完全相同,它返回一个String,所以你实际做的是:

NSArray *hypothesis;
NSString *hypothesisDescription = [hypothesis description];
NSMutableArray *myArray = hypothesisDescription;
NSMutableArray *urArray = hypothesisDescription;

再次,将一个String分配给一个Array变量 - 几乎肯定不会做你想要或需要的。

如果假设是一个字符串并且您打算将其添加到数组中,则必须首先确保该数组已初始化(即它必须是一个有效的数组)。像NSMutableArray *myArray = [[NSMutableArray alloc] init]这样的东西可以解决问题。然后你可以使用NSMutableArray的方法来存储你的String,例如。 [myArray addObject:hypothesis]

如果假设是数组,您希望将其存储在myArray中,或者您是否首先将其转换为字符串?

然后你继续说: -

  

我将比较myArray == urArray   一个ifelse声明

考虑到前面代码的混淆,不清楚为什么要这样做或者你希望实现什么。你没有包含这个代码应该做什么的描述。目前尚不清楚你是否知道包含相同对象的两个数组不是==(因为它们是两个不同的数组并且有自己的标识),但指向同一个数组的两个指针是== ,例如:

NSArray *aSimpleArray = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSArray *foo = aSimpleArray;
BOOL result = (aSimpleArray==foo); // These are equal, result is true

NSArray *anotherSimpleArray = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
BOOL result = (aSimpleArray==anotherSimpleArray); // These are not equal, result is false

因此,除非你想测试你是否有两个指向同一个数组的指针(而不只是两个具有相同对象的数组)==可能不会做你想要的。请注意,有一些方法可以帮助比较数组,例如-isEqualToArray,以便:

NSArray *aSimpleArray1 = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSArray *aSimpleArray2 = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
BOOL areEqual1 = aSimpleArray1==aSimpleArray2; // FALSE
BOO areEqual2 = [aSimpleArray1 isEqualToArray:aSimpleArray2]; // TRUE

通常,您必须熟悉要使用的所有对象的接口

http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSArray_Class/NSArray.html

Apple文档非常好,但我推荐一本好书。关于SO的书籍推荐有很多帖子,所以我留给你。否则,Apple会提供数百个您应该学习的简单示例项目。

答案 2 :(得分:0)

您是否尝试将假设添加到您的某个数组中(即您的数组是多个假设的数组)?如果是这样,那么你可以使用addObject:

[myArray addObject:hypothesis];

如果假设字符串实际上应该代表整个数组,那么在我们可以帮助你之前,你需要解释如何将元素编码到这个字符串中。

答案 3 :(得分:0)

  

我正在尝试存储相同的文字   这个假设正在持有   myArray的。

在那种情况下:

NSArray *myArray = nil;
…
myArray = [NSArray arrayWithObject:hypthesis];

但主要是我建议您通过一些很好的Objective-C教程,因为您似乎混淆了许多基本想法,并且在不了解基础知识的情况下很难到达某个地方。