Как я могу заставить мое приложение помнить целое число? - PullRequest
0 голосов
/ 25 мая 2011

В одном из моих ViewControllers я установил целое число и то, что оно равно.Я пытаюсь поместить это целое число в NSLog в более позднем ViewController, чтобы увидеть, запоминает ли он его, и думает, что это 0, а это не так.Я довольно новичок в программировании, поэтому я действительно запутался.Я не выпустил целое число, и я подумал, может быть, это будет сделано.Что мне делать?!

ОБНОВЛЕНИЕ:

Интел находится в StarsViewController.h, StarsViewController.m и StepOne.m.

StarsViewController.h

#import <UIKit/UIKit.h>

@interface StarsViewController : UIViewController {
int typeofstar;
}

@property (nonatomic) int typeofstar;
@end

StarsViewController.m

#import "StarsViewController.h"
#import "StepOne.h"

@implementation StarsViewController
@synthesize typeofstar;


#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
typeofstar = 1;
NSLog(@"%i", typeofstar);
}


- (IBAction)proceed {
StepOne *one = [[[StepOne alloc] initWithNibName:@"StepOne" bundle:nil] autorelease];
// you can change flip horizontal to many different other transition styles.
one.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:one animated:YES];
}

@end

StepOne.m

// I only included the important part:
- (void)viewDidLoad
{
    [super viewDidLoad];
    StarsViewController *type = [[StarsViewController alloc] autorelease];
    NSLog(@"%i", type.typeofstar);
}

Ответы [ 3 ]

0 голосов
/ 25 мая 2011

Возможно, проблема в том, что вы никогда не инициализируете экземпляр StarsViewController. Попробуйте что-то вроде следующего:

StarsViewController *type = [[[StarsViewController alloc] initWithNibName: @"StarsView" bundle: nil] autorelease];

Кроме того, со ссылкой на ответ Firoze, каждый контроллер представления звезд будет иметь свой собственный type ivar. Если вы хотите иметь глобальный тип, посмотрите на статические переменные или NSUserDefaults.

0 голосов
/ 25 мая 2011

Для синглтона или класса данных , я думаю, будет лучшим решением для вас. Вы можете объявить переменную в синглтон-классе и получить к ней доступ в любом месте приложения. Таким образом, значение переменной (целое число в вашем случае) сохраняется.
Вот как работает класс singleton / Data:

// DataClass.h

@interface DataClass : NSObject {    

int i;   

}    
@property(nonatomic,assign)int i;    
+(DataClass*)getInstance;    
@end  

// DataClass.m

@implementation DataClass    
@synthesize i;    
static DataClass *instance =nil;    
+(DataClass *)getInstance    
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
    {    

        instance= [DataClass new];    
    }    
}    
return instance;    
}    

Теперь в вашем контроллере представления вам нужно вызвать этот метод как:

DataClass *obj=[DataClass getInstance];  
obj.i= // whatever you want;  

Эта переменная будет доступна каждому контроллеру представления. Вам просто нужно создать экземпляр класса данных.

0 голосов
/ 25 мая 2011
StarsViewController *type = [[StarsViewController alloc] autorelease];

Эта строка (выше) создает экземпляр StarsViewController.Это не тот же экземпляр (тот же объект), что и у другого только что созданного StarsViewController.

Так что у этого нового экземпляра StarsViewController есть свой собственный тип typeofstar, который изначально будет равен нулю.

Имеет ли это смысл?

РЕДАКТИРОВАТЬ:

Как это исправить:

Ну, вы могли бы передавать вещи непосредственно от одного контроллера представления к другому.В контроллере представления StepOne можно создать свойство, которое можно установить непосредственно перед его представлением.Вы делаете это сейчас на самом деле, если вы посмотрите, как вы устанавливаете modalTransitionStyle на вашем контроллере представления StepOne.Это собственность.Вы можете создать другое свойство с именем "typeOfStar" и установить его таким же образом.

У вас также есть много других возможностей для обмена данными.Когда ваше приложение работает, вы должны думать о нем как о множестве объектов, находящихся в памяти в любой момент времени.Ваш делегат приложения - это один объект, к которому довольно легко добраться из любого места, поэтому люди используют его для хранения небольших вещей, которые они хотят использовать во всем приложении.

Вы можете посмотреть на глобальные переменные как на другой вариант.(используйте с умом!)

По мере того, как ваши потребности усложняются, у вас могут быть другие предметы, которые вы держите в качестве синглетонов или свисающие с них.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...