在2个目标c之间链接一个对象?

时间:2013-05-31 12:17:45

标签: objective-c

我有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获得了很好的答案:)。

3 个答案:

答案 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并为您分配一个对象。每次下次调用它时,它都会返回相同的已分配实例。