Я хочу использовать глобальные переменные в своем коде. У меня есть некоторый ViewController, который использует некоторые экземпляры, поэтому использовать global будет проще, чем передавать экземпляры между контроллерами.потеря данных в глобальных переменных Objective-C Iphone
Таким образом, я создаю глобальное в AppDelegate:
AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
//Global Variables
NSInteger userID;
NSMutableArray *friends;
}
@property (assign, nonatomic) NSInteger userID;
@property (strong, nonatomic) NSMutableArray *friends;
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
self.friends = [[NSMutableArray alloc] init];
return YES;
}
И я получить доступ к глобальным в любом контроллере добавления этот код в ViewControllerN.h:
#import "AppDelegate.h"
#define global \ ((AppDelegate *)[UIApplication sharedApplication].delegate)
Так ViewControllerN.m я могу получить доступ к глобальным, например:
[global.friends addObject:@"Henry"];
Он отлично работает. Но где-то я теряю данные от глобальных.
Я начинаю мое приложение в PageControllerA (ControllerA)
- контроллер имеет Scrollview с ControllerB, C и D.
- добавляют данные в global.friend в ControllerA viewdidLoad
- контроллер B, C, D может получить доступ к глобальному правилу в viewDidLoad, но когда я вызываю метод из любого из этих контроллеров, global.friend Empty.
- Контроллер вызова B E, но global.friend также пуст для контроллера E.
Я только белые данные в global.friend, никогда не удаляю никаких объектов.
Почему я теряю данные? (global.friend empty)
Вопрос в том, почему вы используете глобальные переменные? Идите против стандарта, Apple определила передовую практику и, конечно, вы столкнетесь с проблемами.Объявите переменные static, и это может решить вашу проблему. [Или попробуйте этот подход] (http://stackoverflow.com/q/338195/874257) –
Это не глобальные переменные. Это переменные экземпляра App Delegate (singleton). – hotpaw2
Вы выделили свой изменяемый массив, прежде чем пытаться добавить к нему объекты? Проверьте порядок вызовов методов. – hotpaw2