У вас много проблем с вашим кодом.
return [trackUrl stringByAppendingFormat:trackNumberUrl];
Вы не должны использовать произвольную строку в качестве формата, потому что если она содержит спецификатор формата, такой как "% d", тогда метод будет искать переменную, которой там нет, и, скорее всего, произойдет сбой. Вы должны использовать stringByAppendingString:
вместо этого. Однако, похоже, что это не то, что вам нужно, поскольку имя метода - setTrackNumberUrl:
. Если вы хотите изменить значение переменной trackUrl
, вы не можете вызвать stringByAppendingFormat:
; все, что нужно, это вернуть новую строку и оставить оригинал в покое. Я думаю, вы просто хотите что-то вроде
[trackUrl release];
trackUrl = [trackNumberUrl retain];
Другая проблема:
return [[[self alloc] setTrackNumberUrl:trackNumber] autorelease];
В этом контексте self
является экземпляром Track. Экземпляр не поймет сообщение alloc
, которое должно быть отправлено классу. Он вернет новый экземпляр, на который вы должны отправить сообщение init
. Так что вы бы сделали что-то вроде [[Track alloc] init]
.
NSLog(trackNumber);
Первый параметр NSLog - это строка формата, поэтому по тем же причинам, что и выше, вы не должны использовать переменную, вы должны сделать что-то вроде этого: NSLog(@"%@", trackNumber);
Эта строка кода выводит значение переменной trackNumber , Учитывая, что у вас есть метод с именем trackNumber
прямо над ним, мне интересно, действительно ли вы хотите вызвать метод и получить результат. В этом случае вам нужно записать его как [self trackNumber]
, который будет вызывать метод и возвращать строку NSString.