我试图将数组假设中的字符串结果存储到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。
答案 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
通常,您必须熟悉要使用的所有对象的接口
Apple文档非常好,但我推荐一本好书。关于SO的书籍推荐有很多帖子,所以我留给你。否则,Apple会提供数百个您应该学习的简单示例项目。
答案 2 :(得分:0)
您是否尝试将假设添加到您的某个数组中(即您的数组是多个假设的数组)?如果是这样,那么你可以使用addObject:
[myArray addObject:hypothesis];
如果假设字符串实际上应该代表整个数组,那么在我们可以帮助你之前,你需要解释如何将元素编码到这个字符串中。
答案 3 :(得分:0)
我正在尝试存储相同的文字 这个假设正在持有 myArray的。
在那种情况下:
NSArray *myArray = nil;
…
myArray = [NSArray arrayWithObject:hypthesis];
但主要是我建议您通过一些很好的Objective-C教程,因为您似乎混淆了许多基本想法,并且在不了解基础知识的情况下很难到达某个地方。