저는 스토리 보드를 사용하여 기본 게임을 만들고 있습니다. 나는 여러 개의 뷰 (물론)를 가지고 있으며 뷰를 다시 열 때 리셋한다. 그래서 appdelaget이 객체를 만들어야하는 클래스를 만들었습니다. 이제보기를 다시로드 할 때 변수를 전달해야하거나 재설정하지 않을 모든보기에 appdelaget을 가져옵니다. 자, 사람이 어떻게 다른 개체 안에 만들어진 개체에서 변수를 얻을 줄 알아.개체의 개체에서 변수를 가져 오는 방법 (Objective-C)
VariableControll.h :
#import <Foundation/Foundation.h>
@interface VariableControl : NSObject
@property (nonatomic) int maxNr;
@property (nonatomic) int nrSet;
@property (nonatomic) int guessNr;
VariableControll.m :
#import "VariableControl.h"
@implementation VariableControl
@synthesize maxNr;
@synthesize guessNr;
@synthesize nrSet;
@end
이 변수를 저장하는 간단한 클래스입니다 어쨌든, 그것은 설명하기 어려운, 여기에 중요한 클래스는 그것은 전망을 통과 할 것입니다.
Appdelaget.h :
#import <UIKit/UIKit.h>
#import "VariableControl.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
Appdelaget.m :
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
VariableControl *VarControll = [[VariableControl alloc] init];
VarControll.maxNr = 100;
VarControll.nrSet = arc4random() %VarControll.maxNr;
// Override point for customization after application launch.
return YES;
}
//More methods are not listed becouse they're non-touched//
Game.h :
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
@interface Game : UIViewController
//User interaction and labels
@property (strong, nonatomic) IBOutlet UILabel *theTitle;
@property (strong, nonatomic) IBOutlet UITextField *theInput;
@property (strong, nonatomic) IBOutlet UILabel *theMessage;
@property (strong, nonatomic) IBOutlet UINavigationItem *theTabTitle;
@property (strong, nonatomic) IBOutlet UIButton *theGuessButton;
@property (strong, nonatomic) IBOutlet UIButton *theNewGameButton;
//Variables
@property (nonatomic) int number;
@property (nonatomic) int guess;
@property (nonatomic) int nrOfGuess;
@property (nonatomic) int maxNr;
@property (nonatomic, retain) NSString *guessString;
//Actions
- (IBAction)guess:(id)sender;
- (IBAction)newGame:(id)sender;
@end
//Have some non-neded outlets becouse I tried to fix SIGABRT error, and didn't remove
them(btw, I have solved sigabrt!!!!)//
Game.m :
#import "Game.h"
@implementation Game
@synthesize theTitle;
@synthesize theInput;
@synthesize theMessage;
@synthesize theTabTitle;
@synthesize theGuessButton;
@synthesize theNewGameButton;
@synthesize number;
@synthesize nrOfGuess;
@synthesize guess;
@synthesize guessString;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions
{
AppDelegate *StartUp = [[AppDelegate alloc] init];
return YES;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
//When the user taps somwhere away from the keyboard, it disapears
[theInput resignFirstResponder];
[theTabTitle setTitle:@"Game"];
[theNewGameButton setTitle:@"New Game" forState:UIControlStateNormal];
[theGuessButton setTitle:@"Guess" forState:UIControlStateNormal];
//set a random number and clear variables
nrOfGuess = 0;
guess = 0;
}
- (void)viewDidUnload
{
[self setTheTitle:nil];
[self setTheInput:nil];
[self setTheMessage:nil];
[self setTheTabTitle:nil];
[self setTheGuessButton:nil];
[self setTheNewGameButton:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[theInput resignFirstResponder];
//If the user touches outside the keyboard, it will disapear
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (IBAction)guess:(id)sender {
guess = [[theInput text] intValue];
if (guess == number) {
guessString = [NSString stringWithFormat:@"Corret! You guessed %i times!", nrOfGuess];
[theMessage setText: guessString];
number = arc4random() %101;
nrOfGuess = 0;
guess = 0;
}
else {
if (guess < number) {
[theMessage setText:@"Sorry! Guessed too low!"];
nrOfGuess = nrOfGuess + 1;
[theInput setText:@""];
}
else {
[theMessage setText:@"Sorry! Guessed too high!"];
nrOfGuess = nrOfGuess + 1;
[theInput setText:@""];
}
}
}
- (IBAction)newGame:(id)sender {
//set a random number and clear variables
number = arc4random() %101;
nrOfGuess = 0;
guess = 0;
}
@end
자, 질문은; game.m에서 "VarControll"에 maxNr 변수를 어떻게 얻을 수 있습니까? appdelaget.m에 VariableControll 클래스의 객체가 만들어졌습니다. 나는 할 수 없다
number = StartUp.VarControll.maxNr;
그것은 나에게 오류를 줄 것이다!
BTW, 내가 본 바보 같은 질문이나 가장 명백한 대답이 있다면, 나는 목표에 도달하는 초보자입니다. 조언에
고맙습니다, JomanJi
이것은 그랬습니다, 고맙습니다! – JomanJi
이 대답을 받아 들일 수 있습니까? –
권자, 나는 내가했다라고 생각했다. ..... 미안하다! – JomanJi