1

NSString 関数を試してみると、null が返されます。

//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);
}

null の応答が返されますか? 私は何かが恋しいですか?ありがとう。

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)


Trackへの参照を設定するこのコードがあります

@class Track;

@interface MainView : UIView {


    Track *track;
}

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

自己割り当てを使用しない場合は、何を使用すればよいですか?

4

3 に答える 3

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 に答える
1

ほとんどの場合、オブジェクトへの正しい参照に設定しましたtracknil?trackNumberTrack

また、このコード

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

間違っています。なぜあなたは使用してい[self alloc]ますか?新しいTrackオブジェクトを割り当てています (エラーであるクラス名ではなく、オブジェクト参照で静的メソッドを使用しています)、トラック番号の URL を設定し、 autoreleased を返していますが、割り当てNSStringたオブジェクトをリークしています。Track

于 2010-01-11T09:54:34.837 に答える
0
return [trackUrl stringByAppendingFormat:trackNumberUrl];

これについてはよくわかりません。文字列のフォーマットとして使用してみてください。

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