0

私の AppDelegate では、init メソッドの終わり近くで [self setup] メソッドを呼び出します。このメソッドは、URL から文字列を取得してトリミングし、その文字列を _songDirectory というプロパティに割り当てます。

ヘッダー ファイルでの表示方法は次のとおりです。

@property (retain) NSString *_songDirectory;

[setup] メソッドでの割り当て方法は次のとおりです。

//set a URL string
NSString *urlString = [NSString stringWithFormat:@"http://www.blahblahblah.com/php/dev/blah.php?routine=blah"];

NSMutableString *infoString = [self getInfoStringFromURL: urlString];

//get the song directory as a string from the infostring
NSRange startIndex = [infoString rangeOfString:@"song_directory=="];
NSRange endIndex = [infoString rangeOfString:@"end_of_data=="];

_songDirectory = [NSString stringWithString: [infoString substringWithRange: NSMakeRange(startIndex.location + startIndex.length, endIndex.location - startIndex.location - startIndex.length)]];

NSLog(@"STRING IN APP DELEGATE: %@", _songDirectory);

NSLog は、アプリ デリゲートで呼び出されたときに正しい文字列を出力します。しかし、新しいシーンをプッシュした後、そこから _songDirectory にアクセスできません。プッシュされたシーンの次のコードは、EXC_BAD_ACCESS を生成します。

NSLog(@"STRING IN PUSHED SCENE: %@", [[[UIApplication sharedApplication] delegate] _songDirectory]);

上記のステートメントを使用して、アプリ デリゲートから int を取得できますが、文字列は取得できません。いくつかの洞察をいただければ幸いです!

4

2 に答える 2

2

文字列をプロパティではなくインスタンス変数に直接割り当てているため、文字列は保持されません。self._songDirectory = ...の代わりにする必要が_songDirectoryあります(おそらくプロパティsongDirectoryを呼び出す必要があります。先頭のアンダースコアは通常、プライベートインスタンス変数にのみ使用されます)。

于 2012-05-26T20:10:55.650 に答える
1

以下を使用する必要があります。

 self._songDirectory = [NSString stringWithString: [infoString substringWithRange: NSMakeRange(startIndex.location + startIndex.length, endIndex.location - startIndex.location - startIndex.length)]];

プロパティを機能させるために。それ以外の場合は、ivar を直接設定するだけで、保持は行われません。

于 2012-05-26T20:11:41.153 に答える