1

私はxcodeの初心者です。あるビューから別のビューに配列を渡そうとしています。profileidProfileViewControllerの整数を FavouritesViewController の配列に渡したいです。FavouritesViewController が読み込まれると、ログに配列が表示されます。

これが私のコードです:

ProfileViewController.h

- (IBAction)AddFavouritesClicked:(id)sender;

ProfileViewController.m

@synthesize profileid;


int profileid = 0;

- (IBAction)AddFavouritesClicked:(id)sender {

    FavouritesViewController *favController = [[FavouritesViewController alloc]init];
    [favController.favouritesArray initWithObjects:[NSNumber numberWithInt:profileid], nil];
    NSLog(@"%@", favController.favouritesArray);


}

お気に入りViewController.h

@interface FavouritesViewController : UITableViewController
{
    NSMutableArray *favouritesArray;
}

@property(nonatomic, retain)NSArray *favouritesArray;
@end

お気に入りViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@", favouritesArray);
}

これまでのところ、favouritesArray値は常にnull

どんな助けでも大歓迎です。前もって感謝します!

Addtofavoutitesボタンをクリックするたびにログが表示されます

2013-01-27 22:54:52.865 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:10.958 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:11.705 Ad&Promo[8058:c07] (
2
)
2013-01-27 22:56:12.191 Ad&Promo[8058:c07] (
2
)

しかし、代わりに私はそれがこのように見えるようにしたい..

2013-01-27 22:54:52.865 Ad&Promo[8058:c07] (
2,2,2,2
)
4

2 に答える 2

1

ポインタを割り当てておらず、allocメソッドがない場合は、次のようにします。

favController.favouritesArray=[[NSArray alloc]initWithObjects:[NSNumber numberWithInt:profileid], nil];
于 2013-01-27T15:19:03.160 に答える
1

まず、アレイ作成の構文を確認する必要があります。そのはず:

favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

これだけでは問題は解決しませんが、私は推測します

これは、SOで次の2つのステートメントに表示される非常に典型的なエラーです。

FavouritesViewController *favController = [[FavouritesViewController alloc]init];
favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

新しいを割り当てていますFavouritesViewControllerFavouritesViewControllerこれは、アプリですでに初期化した他のものとは何の関係もありません。これは、その内部配列が空である理由を説明しています。

あなたがする必要があるのは、あなたのProfileViewControllerインスタンスにあなたのFavouritesViewControllerインスタンスを認識させることです(前者の中に後者のプライベートインスタンスをインスタンス化するのではなく)。

したがって、のFavouritesViewController内部でプロパティを定義し、ProfileViewController適切に初期化するだけです。その後、次のことができるようになります。

- (IBAction)AddFavouritesClicked:(id)sender {

    self.favController.favouritesArray = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:profileid], nil];

}

これにより、使用している他のViewControllerに設定する必要のある値が設定されます。

編集:

この種の要件のより良い設計は、モデルを使用することです(model-view-controllerのように)。

2つのコントローラーの一方に他方を知らせる代わりに、アプリ内のすべての共有データを保持する新しいクラス(モデル)を作成します。

このクラスは、アプリ内の他のクラスからアクセスできるため、保存するデータを設定および取得できます。

このクラスはシングルトンである可能性があります。

[MyModel sharedModel].favArray = ...

または、クラスメソッドのみを公開するクラスである可能性があります。例:

[MyModel setFavArray:...];
于 2013-01-27T15:21:19.987 に答える