0

ストーリーボードについて質問があります。ViewA にある文字列の値をセグエで変更したい。これは、ViewB がセグエを実行し、それに備えて ViewA の文字列の値を変更する必要があることを意味します。私の問題は、文字列の値が変更されないことです。

ViewA.h ファイル:

@interface NewViewController : UITableViewController <MKAnnotation>
{
    NSString *longString;

}
@property (weak, nonatomic) NSString *longString;

ViewB.m ファイル:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"transmitCoordsToNew"])
    {
        NewViewController *controller = (NewViewController *)segue.destinationViewController;
        controller.longString = [NSString stringWithFormat:@"%f", segueLong];    

    }
}

変数が変更されない理由、または ViewA でさらに操作しても変更が見られない理由は何ですか?

前もって感謝します、

フィル

4

2 に答える 2

2

変数 segueLong がどこから来たのかはわかりませんが、longString への参照が弱いことが問題の原因である可能性が最も高いです。それを強い参照に変更して、それが機能するかどうかを確認してください。

于 2012-08-25T18:34:51.003 に答える
0

prepareForSegueNewViewController *controllerで有効な (非 nil) 値を受け取っている場合[NSString stringWithFormat:@"%f", segueLong];、「弱い」プロパティ属性が値を nil に変える原因であると約 90% 確信しています。

これが理由です!

[NSString stringWithFormat:@"%f", segueLong] には、 prepareForSegue メソッドによって制限されたスコープがあり、所有者もいません (つまり、参照はカウントされません)。segueLong に所有者がいて、arc によって解放されない場合でも、stringWithFormat からの結果の NSString は解放されません!

あなたがする必要があるのは、弱いものを強いものに変えることです。:

@interface NewViewController : UITableViewController <MKAnnotation>
{
    __strong NSString *longString;

}
@property (strong, nonatomic) NSString *longString;

これにより、NSString stringWithFormat によって生成された文字列が NewViewController に属することが保証されます!

于 2012-08-25T19:55:33.050 に答える