私はテーブルビューとシングルトンクラスを探していますが、ここで私は何も解決策を見つけることができませんでした。シングルトンクラスで配列を使用してビューコントローラ間でデータを渡すIOS?
ユーザーが行を選択したときにviewcontrollerにテーブルビューがあります。選択したデータをシングルトンクラスの配列に送信し、別のviewcontrollerのスクリーンに出力します。 、私は、次の試してみましたシングルトンクラスのArrayにデータを渡すべきか、どのように
#import <Foundation/Foundation.h>
@interface DataController : NSObject {
NSArray* standLoc;
}
@property (readonly)NSArray* standLoc; // stand location
+(DataController*)sharedInstance;
@end
#import "DataController.h"
@implementation DataController
@synthesize standLoc;
+(DataController*)sharedInstance
{
static DataController* sharedInstance = nil;
if (!sharedInstance)
{
sharedInstance = [[DataController alloc]init];
}
return sharedInstance;
}
@end
私が選択した見ることができますデバッグで
- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {
StartHuntViewController *startHuntController = [[StartHuntViewController alloc] initWithNibName:@"StartHuntView" bundle:nil];
DataController* sharedSingleton = [DataController sharedInstance];
sharedSingleton = [stands objectAtIndex:indexPath.row];
startHuntController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:startHuntController animated:YES];;
[startHuntController release];
startHuntController =nil;
}
:ここ
は私のシングルトンクラスのコードですitemはsharedSingletonにありますが、どのようにNSArray * standLocに渡すことができますか?
EDIT
私は私のコードを編集した、それが
私のシングルトンの.mと.hの今微FOW複数contorllerビューを作品SO:
#import <Foundation/Foundation.h>
@interface DataController : NSObject {
NSString* standLoc;
}
@property (nonatomic,retain)NSString* standLoc; // stand location
+(DataController*)sharedInstance;
-(void) setData: (NSString *) data;
@end
#import "DataController.h"
@implementation DataController
static DataController* sharedInstance = nil;
@synthesize standLoc;
+(DataController*)sharedInstance
{
@synchronized (self) { //this ensure this methods will not be called at the same time..
if(sharedInstance == nil){
[[self 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{ // incase if we want to copy our singleton instance
return self;
}
//to protect singleton from deallocation, we need to override some functions of memory allocation
-(id) retain {
return self;
}
-(id) autorelease{
return self;
}
-(NSUInteger) retainCount{
return NSUIntegerMax;
}
-(id) init{ // lets set the default data in it
@synchronized (self){
[super init];
standLoc = [[NSString alloc] initWithString:@"Stand Loc"];//for performance, as we expect 5 digits from server, it's size was set to another 5 digits..
return self;
}
}
-(void) setData: (NSString *) data{ // this is the function to set static data which is the member of the class, reaching data will be allowed with this method
@synchronized (self){
if (standLoc != data) {
[standLoc release];
standLoc = [data retain];
}
}
}
-(NSString *) standLoc{
@synchronized(self){
return standLoc;
}
}
へデータをシングルトンに渡す:
DataController* sharedSingleton = [DataController sharedInstance];
NSString* transfer = [stands objectAtIndex:indexPath.row];
[sharedSingleton setData:transfer];
問題は私は複数のviewcontrollersを持っているだけではなく、いずれかのビューからメインビューにデータを渡す場合別のviewcontrollerに移動して再びメインに戻ると、データが失われているのが分かるので、メインviewcontrollerにデータを保持するためのソリューションが必要だったので、シングルトンパターンが答えだと思った –