хранение массива - PullRequest
       1

хранение массива

0 голосов
/ 08 мая 2011

Я пытаюсь сохранить результат строки из гипотезы массива в 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];
        }
}

это в основном так. после этого я буду сравнивать myArray == urArray в операторе ifelse.

Ответы [ 4 ]

2 голосов
/ 08 мая 2011

Try ...

myArray = [NSArray arrayWithObject:[NSString stringWithFormat:@"%@", hypothesis]];
1 голос
/ 10 мая 2011

Да, вы делаете несколько вещей неправильно.

у вас есть метод -pocketsphinxDidReceiveHypothesis , который вы определили как принимающий один аргумент типа NSString *,аргумент называется гипотеза .

В своем вопросе вы говорите

Я пытаюсь сохранить результат строки из гипотезы массива

Что говорит о том, что вы знаете, гипотеза - это массив, но мы не можем проверить это, поскольку вы не показываете этот фрагмент кода.

гипотеза должна быть строкой или массивом.Это не может быть и то и другое, вы не можете быть неуверенным.

Если гипотеза является строкой, т.е.если вы делаете что-то вроде:

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 массиву (ну, я вполне уверен, что вы не имеете в виду в любом случае).Чтобы использовать массив, вы должны использовать несколько методов создания массива, чтобы получить массив.Строка не является массивом и не может претендовать на это.

Теперь, извините, если гипотеза не является строкой, но фактически является массивом (это помогло бы, если бы выпоказал этот кусок кода).Если это массив, т.е.вы делаете что-то вроде этого ..

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

Тогда ваше определение метода не работает, потому что вы определили его как строковый аргумент

- (void)pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis

Когда вам нужно принять аргумент Array

 - (void)pocketsphinxDidReceiveHypothesis:(NSArray *)hypothesis

Тогда следующие две строки не имеют смысла: -

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

[NSString stringWithFormat:@"%@", hypothesis] точно так же, как [hypothesis description], который возвращает строку, так что вы эффективноделает это:

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

Итак, снова присваиваем String переменной Array - почти наверняка не будем делать то, что вы хотите или нуждаетесь.

Если гипотеза является String, и вы намеревалисьдобавив его в массив, вы должны сначала убедиться, что массив инициализирован (т.е. это должен быть допустимый массив).Что-то вроде NSMutableArray *myArray = [[NSMutableArray alloc] init] поможет.Затем вы можете использовать один из методов NSMutableArray для хранения вашей строки, например.[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 предоставляет сотни простых примеров проектов, которые вы должны изучить.

0 голосов
/ 10 мая 2011

Я пытаюсь сохранить тот же текст эта гипотеза держит в туАггау.

В этом случае:

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

Но в основном я бы посоветовал вам пройти хороший урок по Objective-C, поскольку вы, кажется, путаете многие базовые идеи, и трудно найти что-то, не зная основ.

0 голосов
/ 10 мая 2011

Вы пытаетесь добавить гипотезу в один из ваших массивов (т.е. ваши массивы являются массивами нескольких гипотез)?Если это так, то вы можете использовать addObject:

[myArray addObject:hypothesis];

Если строка гипотезы фактически должна представлять весь массив, вам нужно будет объяснить, как элементы кодируются в эту строку, прежде чем мы сможем вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...