在IOS里两个UIView窗口之间传递参数方法有很多,比如
1.使用SharedApplication,定义一个变量来传递.
2.使用文件,或者NSUserdefault来传递
3.通过一个单例的class来传递
4.通过Delegate来传递。
今天想在两个UIViewController之间共享一个object,最早以前用得办法是先在一个controller里创建对象,然后其他 controller通过UITabViewController的view array找到之前的那个controller. 类似于:
NSArray *array = [tab viewControllers];
objectNeeded = [[[array objectAtIndex:0] objecNeededt] retain];
这个办法显然不好。今天google一下,主要有两种更好地解决方案。
把需要共享的object放在AppDelegate类里面。比如需要在两个class里传递一个string:
在YourAppDelegate里创建一个UILabel的instance
在class 1里面:
YourAppDelegate *mainDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate];
mainDelegate.mystring = Label1.text;
在class 2里面:
YourAppDelegate *mainDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate];
label2.text = mainDelegate.mystring;
但是不知道为什么YourAppDelegate *mainDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate];这句话在我的xcode里面不能通过编译。不过这个方法很多人是不推荐的。
创建一个singleton class,代码如下:
@interface DataSingleton : NSObject{
int dataOK;
int rowSelected;
NSMutableArray* dataResult;
};
@property(assign) int dataOK;
@property(assign) int rowSelected;
@property(nonatomic, retain) NSMutableArray* dataResult;
+ (DataSingleton *)singleton;
@end
#import "DataSingleton.h"
#import "labelclass.h"
@implementation DataSingleton
@synthesize dataOK;
@synthesize dataResult;
@synthesize rowSelected;
static DataSingleton * MyCommon_Singleton = nil;
+ (DataSingleton *)singleton
{
@synchronized(self)
{
if (MyCommon_Singleton == nil)
{
[[self alloc] init];
MyCommon_Singleton.dataOK = 0;
MyCommon_Singleton.rowSelected = 0;
MyCommon_Singleton.dataResult = [[NSMutableArray alloc] init];
}
}
return MyCommon_Singleton;
}
+ (id)allocWithZone:(NSZone * )zone
{
@synchronized(self)
{
if (MyCommon_Singleton == nil)
{
MyCommon_Singleton = [super allocWithZone:zone];
return MyCommon_Singleton;
}
}
return nil;
}
+ (void) Destroy
{
MyCommon_Singleton.dataOK = 0;
// for(int i = 0;i < [MyCommon_Singleton.dataResult count]; i++)
[MyCommon_Singleton release];
}
@end