[OBJ-C] [iOS] Получение плавающей запятой из NSArray - Проблема - PullRequest
1 голос
/ 16 ноября 2010

Я недавно застрял в проблеме. Вот в чем дело, я пытаюсь получить объект с плавающей точкой из NSArray, который его содержит, и все, что я могу получить - это (ноль). Очевидно, не то, что я хочу получить. Посмотрите на фрагмент кода:

h = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:1.0], nil];
x = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:2.0], nil]; 
y = [[NSMutableArray alloc] init];

int step = 15; // That is just a random value, will depend on size of h and x.

for (int i = 0; i < step; ++i) {
   NSLog(@"step = %i", i);


 NSMutableArray *xTemp = [[NSMutableArray alloc] initWithArray:x];
 NSMutableArray *hTemp = [[NSMutableArray alloc] initWithArray:h];

 for (int j = 0; j < 3; ++j) {

   float xToMul = [[xTemp objectAtIndex:j] floatValue];
   float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];

   NSLog(@"xToMul = %@", xToMul);
   NSLog(@"hToMul = %@", hToMul);


 }

   NSLog(@"\n");

}

И результат:

xToMul = (null)
hToMul = (null)

и все, что мне нужно, это немного подсчитать.

Спасибо. М.Р.

1 Ответ

5 голосов
/ 16 ноября 2010

Вот ваша проблема:

float xToMul = [[xTemp objectAtIndex:j] floatValue]; float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];
NSLog(@"xToMul = %@", xToMul); NSLog(@"hToMul = %@", hToMul);

% @ для объектов, которые поддерживают-описание.float не является объектом вообще.Этот код отправляет float сообщение -описание, на которое он не может ответить.

Есть два способа решить эту проблему.

Первый - сделать объекты xToMul и hToMul вместо float иоставьте строку формата.

id xToMul = [xTemp objectAtIndex:j];
id hToMul = [hTemp objectAtIndex:(j+i)];
NSLog(@"xToMul = %@", xToMul);
NSLog(@"hToMul = %@", hToMul);

Во-вторых, сохраните их как числа с плавающей точкой, но исправьте строку формата:

float xToMul = [[xTemp objectAtIndex:j] floatValue];
float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];
NSLog(@"xToMul = %f", xToMul);
NSLog(@"hToMul = %f", hToMul);

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

Еще один интересный момент - это цикл:

 for (int j = 0; j < 3; ++j) {

. Он будет проходить через j с тремя значениями: 0, 1 и 2. Это соответствует первому,второй и третий элемент в NSArray.У вас есть два предмета в x и три в h.Я предполагаю, что это просто упрощение вашего исходного кода, но в обоих случаях это один короткий.j из 2 + 1 будет иметь доступ к 4-му элементу в h, а j из 2 - к 3-му элементу в x.

...