Задача C: метод не возвращает строку - PullRequest
0 голосов
/ 09 декабря 2010

Это мой первый вопрос, поэтому, пожалуйста, простите меня, если это очевидно.Я научился программировать на Паскале несколько лет назад, поэтому моя терминология может быть неправильной.Я просмотрел кучу сообщений, но, похоже, ничто не решает мою основную проблему.

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

-(void) convertToFractions:(float *)float2 aString:(NSMutableString *) myString;

... с этим ..

[self convertToFractions:&float1 aString:outputFraction]; 

Идея состоит в том, что float2 - это десятичное число, которое я передаю методу,myString - возвращаемая фракция.

Это выполняется после поиска:

myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
NSLog(@"myString = %@",myString);

Журнал показывает, myString - правильная дробь, т.е. myString правильно отображает дробь, которую я хочу вернуть, но outputFractionnull.

Я думаю, что это проблема с указателем.Я пробовал *myString, но компилятор выдает ошибку (несовместимые типы).

Любые предложения действительно приветствуются.

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Вы хотите изменить вывод метода convertToFractions с void на NSString.Он возвращает ноль, потому что тип возврата вашего метода - void, поэтому он ничего не возвращает.

Тип возврата метода Objective-C указан в скобках в начале имени метода.

Вот пример, но я не вижу, где вы определяете convertToString, поэтому я буду использовать псевдокод.

- (NSString *) convertToFractions:(float *)float2{
  NSString *fraction = *some code to lookup fraction from table;*
  return fraction;
}

myString = [self convertToFractions:(float *)float2];

РЕДАКТИРОВАТЬ:

Как и предполагали другие, вам следует по-новому взглянуть на Objective-C.Я предлагаю вам прочитать этот учебник по Objective-C , написанный Apple.

1 голос
/ 09 декабря 2010

Где вы определяете свою выходную фракцию?Нигде в приведенном выше коде вы не упомянули об этом.

По-видимому, ваш метод преобразования объявлен как (void), что означает, что он ничего не вернет.Если вам нужно вернуть результат в виде строки NSString, объявите его как

-(NSString*) convertToFractions:(float *)float2 aString:(NSMutableString *) myString;

и убедитесь, что вы возвращаете строку NSString до достижения конца метода с помощью

return MyNSStringVariable;

[EDIT]

Я вижу, вы надеетесь, что outputFraction будет возвращен вашим методом, но это не относится к Objective-C (не уверен насчет Паскаля).Вы просто передаете outputFraction в качестве второй переменной в своем методе.

Таким образом, «правильный» способ сделать это будет иметь метод

-(NSString*)convertToFraction:(float*)float2 {
     ...// Do your float to fraction calculation here
     ...// Make sure fraction is formatted as NSString
     return YourFractionVariable;
}

Затем вы можете присвоить возвращаемое значениена переменную по вашему выбору, например:

NSString *fraction = [self converToFraction:aFloatNumber];
NSLog (@"fraction is %@", fraction);

Cheers, Rog

0 голосов
/ 09 декабря 2010

Если вы не хотите возвращать NSString из вашего метода, как предлагали другие, вы можете передать указатель на указатель NSString на вашу функцию (так же, как вы передаете NSError ** некоторым стандартным вызовам API, например, в методах NSFileManager).Ваш код будет выглядеть примерно так:

NSString *outputFraction;
[self convertToFractions:&float1 aString:&outputFraction];

-(void) convertToFractions:(float *)float2 aString:(NSMutableString **) myString{
  ...
   if (myString)
      *myString = [NSString stringWithString:[[decimalInchArray objectAtIndex:x]objectAtIndex:1]];
}
0 голосов
/ 09 декабря 2010

Почему бы просто не вернуть строку?

- (NSString*)convertToFractions:(float)float {
    //Bla bla do everything
    return [myString autorelease]; //Autorelease is for memory-management
}

Кстати: вам серьезно нужно читать в ObjC. Пожалуйста, не пытайтесь использовать свои старые паскали на ObjC. Это другое дело, и ваши знания на самом деле не применимы.

Я бы порекомендовал купить книгу об ObjC или почитать несколько хороших учебников для нее (У самой Apple есть несколько очень хороших)

...