Iphone NSString函数

Iphone NSString函数,iphone,nsstring,nslog,Iphone,Nsstring,Nslog,当我尝试我的NSString函数时,我得到一个空返回 //Track.m static NSString* trackUrl; //static NSString* getTrackNumberUrl; @implementation Track - (NSString*)trackUrl { return @"http://site.com/?a="; } - (NSString*)setTrackNumberUrl:(NSString*)trackNumberUrl {

当我尝试我的NSString函数时,我得到一个空返回

//Track.m

static NSString* trackUrl;
//static NSString* getTrackNumberUrl;

@implementation Track

- (NSString*)trackUrl {
    return @"http://site.com/?a=";
}

- (NSString*)setTrackNumberUrl:(NSString*)trackNumberUrl {
    if (trackUrl != trackNumberUrl) {
        return [trackUrl stringByAppendingFormat:trackNumberUrl];
    }

 return @"Error no trackNumber";
}

- (NSString*)getTrackNumberUrl:(NSString*)trackNumber {
 return [[[self alloc] setTrackNumberUrl:trackNumber] autorelease];
}

@end
MainView.m,只是在NSlog中显示返回答案

- (NSString *) trackNumber{
 return [track getTrackNumberUrl:@"86147224549XX"];
}

- (void)drawRect:(CGRect)rect {
 NSLog(trackNumber);
}
我得到一个空的返回答案?我错过什么了吗?谢谢

在Track.m中编辑一些

- (NSString*)setTrackNumberUrl:(NSString*)trackNumberUrl {
    if (trackUrl != trackNumberUrl) {
        return [trackUrl stringByAppendingString:trackNumberUrl];
    }

    return @"Error no trackNumber";
}

- (NSString*)getTrackNumberUrl:(NSString*)trackNumber {
    return [[[Track alloc] setTrackNumberUrl:trackNumber] init];
}
这就是它应该如何工作

getTrackNumberUrl-->setTrackNumberUrl-->trackUrl(返回)-->setTrackNumberUrl+trackNumber-->getTrackNumberUrl(trackNumberUrl=trackUrl+trackNumber)


我有这个代码来设置跟踪的引用

@class Track;

@interface MainView : UIView {


    Track *track;
}

@property (nonatomic, retain) IBOutlet Track *track;

如果不应该使用self-alloc,我应该使用什么?

最有可能的
track
trackNumber
中的
nil
-您是否将其设置为对
track
对象的正确引用

还有,这个代码

- (NSString*)getTrackNumberUrl:(NSString*)trackNumber {
    return [[[self alloc] setTrackNumberUrl:trackNumber] autorelease];
}

这是不正确的。为什么要使用
[self alloc]
?您正在分配一个新的
Track
对象(在对象引用上使用静态方法,而不是在类名上使用静态方法,这是一个错误),设置它的Track number URL,并返回一个自动删除的
NSString
,但是您正在泄漏分配的
Track
对象。

您的代码有很多问题

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

return [trackUrl stringByAppendingFormat:trackNumberUrl];
我不确定这件事, 尝试将其用作字符串的格式

 return [trackUrl stringByAppendingFormat:@"%@",trackNumberUrl];

“您应该将trackUrl初始化为nil。”静态变量会自动初始化为零。我想在Track中调用getTrackNumberUrl函数。getTrackNumberUrl从setTrackNumberUrl收集信息。我们如何从trackUrl获取基本url。我已经修复了您编写的问题,但它仍然返回Null非常好的解释。我觉得这个代码有点绝望。。。但是请删除关于静态变量初始化的注释-正如KennyTM所指出的,这是不正确的。@KennyTM:谢谢,我不知道从哪里学会了如此防御性。