2

我有 2 个视图控制器,其中包含有关对象的数据,我想将其保存为收藏夹。两个控制器都包含相同类型的对象 <Release>,我想将其保存在收藏夹类中。

Favorite 类相当简单,它有 3 个函数 addFavourite、removeFavourite 和 getFavourites。我想要完成的是两个视图控制器都可以将对象添加到收藏夹类并从收藏夹对象中获取 favouriteObjects 数组。

我尝试的是使最喜欢的类静态,如下所示:

@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 TV 以及 Anum90 的精彩回答:)。

4

3 回答 3

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

然后所有需要访问收藏夹的控制器都应该调用[Favourites sharedFavourites]来获取实例(没有控制器应该调用init)。

于 2013-05-31T12:37:14.363 回答
1

您可能正在寻找单例实例

我如何使用它

+(Favourites *)sharedInstance
{
    static Favourites*_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[Favourites alloc]init];
    });
    return _sharedClient;

}

你可以在你的课程中调用它

[Favourites sharedInstance];

这将为您返回一个初始化一次的对象,并在调用时返回该实例

于 2013-05-31T12:38:17.303 回答
-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];

如果你从任何地方调用 Favorite 并且它之前没有被分配过,它会自动调用 init 并为你分配一个对象。每次你调用它时,它都会返回相同的分配实例。

于 2013-05-31T12:37:58.707 回答