Функция NSString функции Int для новичка в C - PullRequest
0 голосов
/ 17 февраля 2012

Я родом из Visual Basic (давным-давно), поэтому будьте осторожны, пожалуйста ...

Я работаю над приложением для iPhone, и мне нужно отправить NSString (я полагаю, что это NSString для функции, которая собирается преобразовать NSString в целое число и вернуть значение. Вероятно, значение должно быть возвращено как целое число, поскольку атрибут Core Data является целым числом.

Мне нужно отобразить время песни в UILabel, и это NSSTring. Я храню данные в атрибуте Core Data в виде целого числа, так как с ним легче выполнять вычисления и т. Д. Одна из вещей, которые я делаю, - это преобразование секунд (int) в строку «3:32» NSString для Этикетка.

cell.profileItemsSongDurationLabel.text= ConvertSecondstoMMSS([[managedObject valueForKey:@"profileItemsSongDurationInSeconds"] description]);
// implicit declaration of function 'ConvertSecondstoMMSS' is invalid in C99 
// Implicit conversion of 'int' to 'NSString *' is disallowed with ARC
// Incompatible integer to pointer conversion passing 'int' to parameter of type 'NSString *'


- (NSString *)ConvertSecondstoMMSS:(NSString *)songLength  // Conflicting return type in implementation of 'ConvertSecondstoMMSS:': 'int' vs 'NSString *'
{

NSString *lengthOfSongInmmss;

int songLengthInSeconds = [songLength intValue];

int hours = songLengthInSeconds/ 3600;
int minutes = (songLengthInSeconds % 3600) / 60;
int seconds  = songLengthInSeconds % 60;

return lengthOfSongInmmss = [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds];
}

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

Заранее спасибо

-Поль

Пересмотренное решение:

int convertToInt = [[[managedObject valueForKey:@"profileItemsSongDurationInSeconds"] description] intValue];
NSLog(@"convertToInt: %d", convertToInt);
cell.profileItemsSongDurationLabel.text = [self convertSecondstoMMSS:convertToInt];


- (NSString *)convertSecondstoMMSS:(int)songLength
{
    NSString *lengthOfSongInmmss;

    int hours   = songLength/ 3600;
    int minutes = (songLength % 3600) / 60;
    int seconds = songLength % 60;

    return lengthOfSongInmmss = [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds];
}

Единственный оставшийся элемент, который нужно разрешить, это случай lengthOfSongInmmss. Редко у меня будет песня продолжительностью в час, она есть только для «на всякий случай». Есть ли способ, чтобы час не отображался в строковом формате, или лучше сделать простое выражение «если»?

Еще раз спасибо!

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Вы неправильно вызываете свой метод конвертации.Вы как бы смешиваете синтаксис вызова функции C с синтаксисом вызова метода Objective-C.Вот правильный способ вызова вашей функции:

cell.profileItemsSongDurationLabel.text = [self ConvertSecondstoMMSS:[[managedObject valueForKey:@"profileItemsSongDurationInSeconds"] description];

Предполагая, что ConvertSecondstoMMSS находится в том же классе, что и эта строка.

Кроме того, вы должны использовать имена методов для верблюдов.Переименуйте его в convertSecondsToMMSS.

2 голосов
/ 17 февраля 2012

Для устранения ошибок:

Поскольку NSManagedObject возвращает целое число, сделайте следующее:

cell.profileItemsSongDurationLabel.text = [self ConvertSecondstoMMSS:[managedObject valueForKey:@"profileItemsSongDurationInSeconds"]];

Затем измените объявление метода на ожидаемое целое число, как в:

-(NSString *)ConvertSecondstoMMSS:(int)songLength

И используйте целое число непосредственно в методе, как это:

int hours = songLength / 3600;
0 голосов
/ 17 февраля 2012

Вам необходимо создать категорию NSString и затем выполнить этот обходной путь.

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

...