我有2个视图控制器,其中包含有关对象的数据,我想将其保存为收藏夹。两个控制器都包含相同类型的对象<发布>我想把它保存在最喜欢的课程中。
Favorite类非常简单,它有3个函数addFavourite,removeFavourite和getFavourites。我想要实现的是,两个视图控制器都可以向Favorite类添加对象,并从Favorite对象中获取favouriteObjects数组。
我尝试的是将Favorite类设为静态,如下所示:
@implementation Favourites
static Favourites * favourites = nil;
-(id)init {
if(favourites == nil) {
if((favourites = [super init])) {
return favourites;
}
}
return favourites;
}
@end
但是,每次我尝试从一个视图控制器添加收藏夹时,都不会在另一个视图控制器中找到它。无论如何要解决这个问题?
你的忠诚, Sem Wong。
如果您需要更多信息,请询问,我是这个地方的新手所以我不确定您需要多少信息:)。
编辑: 谢谢你们的回答。我正在尝试所有这些,看看哪种方式最适合我。我现在所拥有的似乎运作良好。
编辑2: 好像我不能赞成任何东西但是呵呵:)。感谢Wain和Lithu T.V以及Anum90获得了很好的答案:)。
答案 0 :(得分:1)
尝试按以下方式构建收藏夹类:
@implementation Favourites
- (Favourites *)sharedFavourites
{
static dispatch_once_t pred = 0;
__strong static id _sharedObject = nil;
dispatch_once(&pred, ^{
_sharedObject = [[self alloc] init];
});
return _sharedObject;
}
-(id)init {
self = [super init];
return self;
}
@end
然后,所有需要访问favoutires的控制器都应该调用[Favourites sharedFavourites]
来获取实例(没有控制器应该调用init
)。
答案 1 :(得分:1)
您可能正在寻找singleton instance
我如何使用
+(Favourites *)sharedInstance
{
static Favourites*_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[Favourites alloc]init];
});
return _sharedClient;
}
您可以在课程中将其称为
[Favourites sharedInstance];
这将返回一个初始化一次的对象,并在每次调用
时返回该实例答案 2 :(得分:-1)
你需要将收藏夹设为单个类,这将返回一个&同一个实例。之后,您可以从项目的任何位置访问此对象。
@interface Favourites : NSObject
+(Favourites *)sharedManager;
@end
@implementation Favourites
static Favourites *instance = nil;
+ (Favourites *)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (instance == nil){
instance = [[self alloc] init];
}
});
return instance;
}
-(id) init
{
if ( self = [super init] ) {
}
return self;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [self sharedManager];
}
-(void) addFavorite
{
//Do anything or pass any data by making function with argument
}
@end
在任何地方,您可以在导入后调用它,
[[Favourites sharedManager] addFavorite];
如果您将从任何地方调用收藏夹并且之前未分配,它将自动调用init并为您分配一个对象。每次下次调用它时,它都会返回相同的已分配实例。