Мой код iphone с глобальной переменной не работает, пожалуйста, сообщите - PullRequest
0 голосов
/ 12 октября 2011

Я новичок в Objective-C, и я искал и читал здесь несколько постов о том, как создать "глобальную переменную", но я просто не могу заставить ее работать правильно, пока я могу ее создать и проверить, нозначения не сохраняются в других представлениях, моя глобальная переменная представляет собой массив пользовательских объектов с именем «профиль», я хотел бы иметь возможность читать и записывать этот массив из любого представления моего приложения для iphone (делегат tabbarapplication);

Helper.h

@interface Helper : NSObject {
    int globalInteger;
    NSMutableArray *profiles;
}

@property (nonatomic, retain) NSMutableArray *profiles;

// message from which our instance is obtained
+ (Helper *)sharedInstance;

Helper.m

#import "Helper.h"


@implementation Helper

@synthesize profiles, globalInteger;

+ (Helper *)sharedInstance
{
    // the instance of this class is stored here
    static Helper *myInstance = nil;

    // check to see if an instance already exists
    if (nil == myInstance) {
        myInstance  = [[[self class] alloc] init];
        // initialize variables here
    }
    // return the instance of this class
    return myInstance;
}

ACertainViewController.m

//Initialize Policies Array
NSMutableArray *profs = [[Helper instance] profiles];
profs = [[NSMutableArray alloc] init];

//Sample Data
Profile *prof1 = [[Profile alloc] init];
prof1.name = @"John";

//add
[profs addObject:prof1];
[[[Helper instance] profiles] addObject:prof1];

После этой точки, если я проверю глобальныйсодержимое var "profile" снова возвращает count == 0;Что касается globalInteger var, я даже не знаю, как установить его значение для возможности чтения в другом месте приложения.Любая помощь высоко ценится!Спасибо !!!

Ответы [ 4 ]

1 голос
/ 12 октября 2011

Вам нужно переместить «static Helper * myInstance = nil» за пределы метода класса.Теперь вы каждый раз устанавливаете его равным nil, поэтому каждый раз, когда вы получаете доступ к sharedInstance, он перераспределяется.

0 голосов
/ 12 октября 2011

"переменная экземпляра 'profile', доступная в методе класса"

Если в коде, который вы опубликовали, есть комментарий // initialize variables here, действительно ли вы обращаетесь к профилям переменных? Вместо этого используйте myInstance.profiles.

«предупреждение: неполная реализация класса« Помощник »; предупреждение: определение метода для« + экземпляр »не найдено»

Там какой-то код, который вы нам не показываете, или код, который вы разместили, отличается от вашего реального кода. В опубликованном вами коде нет ни одного метода, объявленного или определенного как «экземпляр», но вы пытаетесь вызвать метод «экземпляр». Существует один с другим именем, который называется «sharedInstance». Скорее всего, в вашем реальном коде вы перепутали имена и объявили «instance», но определили «sharedInstance». Выберите одно имя и придерживайтесь его.

0 голосов
/ 12 октября 2011

Объявите свой NSMutableArray в своем классе AppDelegate (т.е. MyAppDelegate). Затем из другого класса (например, вашего контроллера представления) вы можете сделать это:

#import "MyAppDelegate.h"

MyAppDelegate *aDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
aDelegate.profiles = .... // or do whatever you need to do with the profiles property. 

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

0 голосов
/ 12 октября 2011

Вам необходимо выделить / инициализировать массив профилей. попробуйте это:

// the instance of this class is stored here: thanks @onnoweb for pointing this out
    static Helper *myInstance = nil;
    + (Helper *)sharedInstance
    {
        // check to see if an instance already exists
        if (nil == myInstance) {
            myInstance  = [[[self class] alloc] init];
            // initialize variables here
            profiles=[[NSMutableArray alloc] init];
        }
        // return the instance of this class
        return myInstance;
    }

Также посмотрите здесь: http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

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