Я экспериментирую с использованием синглтона в первый раз. Я хотел бы иметь массив, который является глобальным для всех моих контроллеров представления с некоторыми специальными методами для добавления и удаления элементов (это относится к товарам в виде корзины).Путаница относительно использования NSMutableArray и Singleton
Мой одноэлементный класс называется Корзина.
Это Cart.h:
@interface Cart : NSObject
@property NSMutableArray *cartArray;
+ (Cart *)sharedManager; // Class method to return the singleton object
- (void)addItemToCart:(id)object;
- (void)removeItemFromCart:(id)object;
- (void)emptyAllItemsFromCart:(id)object;
- (NSMutableArray *)returnArray;
@end
Это Cart.m:
@implementation Cart
// @property NSMutableArray *cartArray;
NSMutableArray *cartArray;
+ (Cart *)sharedManager
{
Cart *cartObject = [[Cart alloc]init];
// self.cartArray = [NSMutableArray new];
return cartObject;
}
- (void)addItemToCart:(id)object
{
if(!cartArray){
cartArray = [NSMutableArray new];
}
[cartArray addObject:object];
}
- (void)removeItemFromCart:(id)object
{
[cartArray removeObject:object];
}
- (void)emptyAllItemsFromCart:(id)object
{
[cartArray removeAllObjects];
}
Тогда в одном из моих контроллеров зрения, я пытаюсь передать пользовательский объект (который содержит строки и NSNumbers) в мой глобальный массив.
// Cart *singleton = [Cart sharedManager];
// [singleton addItemToCart:self.localChosenAccessory];
Или, может быть что-то вроде:
Cart *mySingleton = [Cart sharedManager];
mySingleton.cartArray = self.addToCartArray;
Оба выше одноэлементных объектов выходят на ноль.
Я новичок в одиночных играх и цели C в целом. Буду признателен за любые советы. Я прочитал много похожих ссылок переполнения стека, но не совсем понял это в моей ситуации.
Спасибо, похоже, что он частично работает (я могу видеть мои объекты в моем массиве, когда я поставил точки останова в моем классе Singleton). Но можете ли вы дать мне пример того, как вызвать мой массив singleton, когда я нахожусь в другом контроллере представления? –
Из почти любого места вы можете получить доступ к своим методам, будь то inline, например 'NSMutableArray * cartArray = [[Cart sharedManager] returnArray]', или если вы выполняете несколько операций, например: 'Cart * theCart = [Cart sharedManager]; NSMutableArray * cartArray = [theCart return Array]; ' – RobP
Спасибо, я смог разобраться, и мой синглтон отлично работает. –