1

当我尝试我的 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 (return) --> setTrackNumberUrl + trackNumber --> getTrackNumberUrl (trackNumberUrl = trackUrl + trackNumber)


我有这段代码来设置对 Track 的引用

@class Track;

@interface MainView : UIView {


    Track *track;
}

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

那么如果不应该使用自我分配,我应该使用什么?

4

3 回答 3

1

很可能trackniltrackNumber- 您是否将其设置为对对象的正确引用Track

另外,这段代码

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

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

于 2010-01-11T09:54:34.837 回答
1

你的代码有很多问题。

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。

于 2010-01-11T10:04:32.437 回答
0
return [trackUrl stringByAppendingFormat:trackNumberUrl];

我不确定这个,尝试使用它作为字符串的格式。

 return [trackUrl stringByAppendingFormat:@"%@",trackNumberUrl];
于 2010-01-11T10:09:38.833 回答