Iphone NSString函数
当我尝试我的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 {
//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:谢谢,我不知道从哪里学会了如此防御性。