我正在尝试使用Singleton传递一个对象,但是当我在一个新的ViewController中打印它时它会给我(null)。当我在Viewcontroller1中NSLog选项时,它会打印出对象。
Viewcontroller1.h
@interface PrivateViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate>
{
rowNumber *optionsSingle;
}
Viewcontroller1.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
optionsSingle = [rowNumber singleObj];
optionsSingle = [devices objectAtIndex:indexPath.row];
}
Viewcontroller2.h
@interface SelectVideo : UITableViewController<NSFetchedResultsControllerDelegate>
{
rowNumber *optionsSingle;
}
Viewcontroller2.m
- (void)viewDidLoad
{
[super viewDidLoad];
optionsSingle=[rowNumber singleObj];
NSLog(@"%@", [NSString stringWithFormat:@"%@", optionsSingle.selectedRowNow]);
}
row.h
@interface rowNumber : NSObject
{
NSMutableArray *selectedRowNow;
}
@property (nonatomic) NSMutableArray *selectedRowNow;
+(rowNumber *)singleObj;
@end
row.m
@implementation rowNumber
{
rowNumber *anotherSingle;
}
@synthesize selectedRowNow;
+(rowNumber *)singleObj
{
static rowNumber * single=nil;
@synchronized(self) {
if(!single) {
single = [[rowNumber alloc] init];
}
}
return single;
}
@end
答案 0 :(得分:1)
你应该像这样创建你的单身:
static id shared_ = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared_ = [[[self class] alloc] init];
});
return shared_;
同样在viewController1.m中:
optionsSingle = [rowNumber singleObj];
optionsSingle = [devices objectAtIndex:indexPath.row];
第二行使第一行毫无用处。
你也试图记录一些东西,从它的外观来看,你永远不会创造或设置。我无法看到你实际设置'selectedRowNow'的位置 - 你应该覆盖rowNumber类中的init方法来创建可变的'selectedRowNow'数组。
答案 1 :(得分:-1)
你会像这样轻松地创建一个单身
在你的.h文件中给出了下面的代码
@interface MySingleton : NSObject {
NSMutableArray *selectedRowNow;
}
+(MySingleton *)sharedInstance;
下一步是在.m文件中编写以下代码
@implementation MySingleton
static MySingleton *sharedInstance = nil;
+ (MySingleton *)sharedInstance {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [[MySingleton alloc] init];
}
}
return sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance;
}
}
return nil;
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
- (id)init {
if ((self = [super init])) {
}
return self;
}
之后,您可以在.pch文件或常量文件中定义此波纹管代码以减少代码
#define AppSingleton [MySingleton sharedInstance]
然后调用
AppSingleton = [devices objectAtIndex:indexPath.row];
快乐编码!!!