2010-10-28 4 views
3

У меня есть 2 двухместных номера с каждой итерацией. Я хочу добавить к NSMutableArray, но я не могу показаться, что это произошло.Добавить в NSMutableArray

NSMutableArray *touchArray = [[NSMutableArray alloc]init]; 
[touchArray addObject:[NSString stringWithFormat:@"%d", "%d", tapTotal, touchBegin]];  
NSLog(@"array: %@", touchArray); 

Консоль печатает 14108 в качестве значения массива, я не знаю, где, что исходит от, это не значение либо на переменных. И XCode жалуется на первые две строки, «локальная декларация„touchArray“скрывает переменную экземпляра. Я знаю, что я делаю, по крайней мере одну вещь wronl

Спасибо за любую помощь, Роберт

ответ

6

во-первых, 'локальная проблема декларации': Вы уже объявленный touchArray в другом месте, поэтому вам не нужно обновлять, просто (возможно) инициализировать так: touchArray = [[NSMutableArray alloc] init];

Во-вторых: двойная проблема: theres довольно много: вы добавляете строку в массив, а не два удвоения. добавить двойной, вам нужно обернуть его в NSNumber первый:

[touchArray addObject:[NSNumber numberWithDouble:firstDouble]]; 
[touchArray addObject:[NSNumber numberWithDouble:secondDouble]]; 

также вы хотите распечатать каждую переменную в массиве, чтобы проверить это, я поверил бы, а не сам объект массива. для этого: NSLog(@"array[0] = %g", [[touchArray objectAtIndex:0] doubleValue]

Редактирование для пояснения ответа: мой ответ предполагает, что плакат хочет добавить два удвоения отдельно к массиву, а не строку с двумя значениями в ней. Думаю, я мог бы это понять, поскольку у нас с Кенни были разные выходы :)

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

+0

double будет '% g'. – kennytm

+0

ahh, конечно, не думал, просто видел это в своем посте :) –

+2

Еще проще: напечатайте объект 'NSNumber':' NSLog (@ "array [0] =% @", [touchArray objectAtIndex: 0]) '. Еще проще: просто распечатайте весь массив, как сказал ассер: 'NSLog (@" array =% @ ", array)'. '- [NSArray description]' выводит его содержимое в формате псевдосталиста-plist. –

5

Вы используете +stringWithFormat: неверно. Только строка может быть строкой формата, остальная часть будет передана как параметр для форматирования. В вашем коде строка формата "%d", поэтому время выполнения будет ожидать ровно 1 целое число. Он видит, что адрес во втором "%d" 14108, поэтому он будет печатать это как целое число.

Правильный код должен быть:

[NSString stringWithFormat:@"%g %g", tapTotal, touchBegin] 

(Обычно %dint, %uunsigned, %gdouble и CGFloat, %@ → Objective-C объектов и т.д.)

+1

Это на самом деле * неправильно *: '% d' ожидает Int, но значение пройденный двойной. Размеры этих двух объектов (в стандартном смысле слова C) могут различаться, и это, вероятно, испортит обработку varargs. Если вы хотите обрезать int, тогда вы должны явно использовать двойные значения для int, например, '(int) tapTotal'. –

1

"local declaration of 'touchArray' hides instance variable" показывает, что вы уже определили один и тот же массив в другом месте кода локально. Или вы определили его в свой .h-файл

NSLog Невозможно напрямую распечатать то, что у вас есть внутри массива. Если вы добавили строку в качестве первого объекта (т.е. индекс 0), то вы должны напечатать как this-

NSLog(@"array: %@", [touchArray objectAtIndex:0]); 

Приветствиях

Смежные вопросы