1

Objective と iPad アプリは初めてです。別のクラス/ビュー コントローラーで既に使用している配列を表示しようとしています。アクセスしようとしている配列は「MainMenuScreen.m」にあり、その配列を「ScoresScreen.m」という別のクラスで使用したいと考えています。オンラインで検索したところ、セグエと呼ばれるものが戻ってきたようです? 例を調べていましたが、エラーが発生し続け、何をすべきかわかりません。確かに、別のクラスから配列を取得して表示する簡単な方法が必要ですか? 「ScoresScreen.m」の冒頭でこれを実行しようとしました-「MainMenuScreen.m」をインポートしましたが、そこから配列を呼び出そうとするとエラーが発生します。私のコードはすべて機能しています。他のクラスから配列を取得してコードにプラグインするだけです。あなたが私のためにコードを書いてくれるとは思っていません。しかし、別のクラスの配列を使用する方法を教えてください。前もって感謝します


これはScoresScreen.hのコードです

#import <UIKit/UIKit.h>


@interface ScoresScreen : UIViewController<UITableViewDataSource, UITableViewDelegate>{
     NSMutableArray *scoresArray;
}
@property (weak, nonatomic) IBOutlet UITableView *tableView;


@end

これは ScoresScreen.m コードです =

#import "ScoresScreen.h"
#import "MainMenuScreen.h"




@interface ScoresScreen ()

@end

@implementation ScoresScreen

NSMutableArray *TestScoresArray;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{


    TestScoresArray = [[NSMutableArray alloc] init];//test data

    [TestScoresArray addObject: [NSMutableArray arrayWithObjects:@"Name : Bob",@" | Score : 134", nil]];//testData
    [TestScoresArray addObject: [NSMutableArray arrayWithObjects:@"Name : Roger",@" | Score : 12",nil]];//testData
    [TestScoresArray addObject: [NSMutableArray arrayWithObjects:@"Name : Ben",@"| Score : 34",nil]];//testData
    [super viewDidLoad];



    for(NSMutableArray *m in TestScoresArray)
    {
        NSLog(@"%@%@", m[0],m[1]);
   }

}

- (void)addNewScore
{

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}
-  (NSInteger)tableView:(UITableView *)tableView
  numberOfRowsInSection:(NSInteger)section
{
    return 6;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"myCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }



NSLog(@"%@",scoresArray);

    NSString *continent;
   NSMutableArray *country = [scoresArray objectAtIndex:indexPath.row];
    continent =[NSString stringWithFormat:@"%@ %@",[country objectAtIndex:0],[country objectAtIndex:1]];
cell.textLabel.text = continent;

 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

 return cell;
}


- (void)viewDidUnload {
    [self setTableView:nil];
    [super viewDidUnload];
}
@end

これは MainMenuScreen.h のコードです

#import <UIKit/UIKit.h>

@interface MainMenuScreen : UIViewController

- (IBAction)PlayGameBT:(id)sender;

- (IBAction)ViewScoresBT:(id)sender;

-(void)AddNewScore :(NSString *)userName :(int)score;//for PlayGame see .m

@end

これは MainMenuScreen.m のコードです

#import "MainMenuScreen.h"
#import "PlayGame.h"
#import "ImageTest.h"

@interface MainMenuScreen ()

@end

@implementation MainMenuScreen

//---------------------------------------------------------------------------------

//------------------------------------Variables------------------------------------

PlayGame *playGame;//PlayGameObject

NSMutableArray *gameDataArray;//Game Data Array (A array storying multable ImageTest Objects)

NSMutableArray *scoresArray;//<-------This need to go to view scores

//---------------------------------------------------------------------------------

//----------------------------------Constructors-----------------------------------

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    scoresArray = [[NSMutableArray alloc] init];

    [scoresArray addObject: [NSMutableArray arrayWithObjects:@"Bob",[NSNumber numberWithInt:134],nil]];//testData
    [scoresArray addObject: [NSMutableArray arrayWithObjects:@"Roger",[NSNumber numberWithInt:12],nil]];//testData
    [scoresArray addObject: [NSMutableArray arrayWithObjects:@"Ben",[NSNumber numberWithInt:34],nil]];//testData

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

//---------------------------------------------------------------------------------

//----------------------------------Add New Score----------------------------------
//a setter Method so Play Game can add the user name and score to the scoresArray
-(void)AddNewScore :(NSString *)userName :(int)score
{
    //adds user name and score to the array
    if (scoresArray != nil)
    {
        /*NSMutableArray *nameAndScore = [[NSMutableArray alloc] init];
        [nameAndScore addObject:userName];
        [nameAndScore addObject: [NSNumber numberWithInt:score]];//int needs to be converted before storing in an array
        [scoresArray addObject:nameAndScore];*/

        [scoresArray addObject: [NSMutableArray arrayWithObjects:userName,[NSNumber numberWithInt:score],nil]];


        for(NSMutableArray *m in scoresArray)
        {
            NSLog(@"%@%@", m[0],m[1]);//prints out the array in logs to make sure it is working
        }
    }
}
4

3 に答える 3

0

配列をアプリ デリゲートに移動します。任意のクラスからアプリ デリゲートにアクセスするには、次のようにします。

#import "NameOfYourAppDelegate.h"

ファイルの先頭に、

NameOfYourAppDelegate *appDelegate = [UIApplication sharedApplication].delegate

使いたいところ。

于 2012-12-11T16:34:54.490 に答える
0

2 つまたは 3 つの異なる方法でそれを行うことができます。ライアンがすでにコメントしたことに加えて。

  1. ScoresScreen を作成するとき、ただし ScoresScreen を表示する前に、MainMenuScreen から渡すことができます。

  2. Array を、それをインポートする任意のクラスから取得できる MainMenuScreen のプロパティにすることができます。

  3. 配列を管理する別の DataManager の種類のクラス (通常はシングルトン クラス) を持つことができ、両方のクラスがそこから配列を取得できます。

また、インポートするときは、投稿に入力したような .m ではなく、.h ファイルをインポートする必要があります。それがタイプミスかコードの間違いかはわかりません。MainMenuScreen に配列を返すメソッドまたはプロパティがある場合は、ヘッダー ファイル (.h) で宣言する必要があります。これにより、それをインポートするクラスがその存在を認識します。

于 2012-12-11T15:21:25.213 に答える