2

IPhone我正在制作的应用程序中,我有一个initialViewController

(1) 带按钮。单击按钮后,它会转到另一个视图控制器

(2),此时从CoreData文件加载数据并将其显示给用户。

我的问题是(2)的加载和数据的实际显示之间有一个小的延迟。这当然是因为加载数据需要一点时间。我正在这样做asynchronously,我的目标是永远不显示旋转的轮子或加载屏幕(更用户友好)。

我想要做的是“ preload”在(1)处的数据,而不是在(2)处,这样数据应该在(2)加载时已经加载并且应该立即显示。我知道如何在 (1) 处加载数据,但我不知道如何轻松地将其传递给 (2)。我不能用 segue 来做,因为我的应用程序实际上比上面的描述要复杂一些,而且通过 segue 做起来很麻烦。

我听说可以使用“ AppDelegate”,但由于我是编程新手,所以我不知道如何有效地使用它。我一直在关注的在线课程并没有对如何使用它提供非常清晰的见解,所以我有点迷茫。

4

4 回答 4

1

在看到您对 Paras 帖子的评论后,我为您提供了更好的解决方案:

创建一个名为 fileLoader 的 NSObject 子类

//in fileLoader.h
@interface fileLoader : NSObject {
}
+(fileLoader *)sharedInstance;
+(void)createSharedInstance;
//add functions and variables to load, store data for use in another class
@end

然后,

//in fileLoader.m
@implementation fileLoader
static id _instance;


+(void)createSharedInstance{
    _instance = [[fileManager alloc] init];
}
+(fileManager *)sharedInstance{
    return _instance;
}
//other functions for storing, retrieving, loading, standard init function, etc.

@end 现在你可以调用[fileManager createSharedInstance]实例化一个文件管理器,你可以通过调用函数在任何地方使用[fileManager sharedInstance].

于 2012-11-09T12:28:50.677 回答
0

属性NSMutableArray与您合成这样的数据..在yourNextViewController.h文件中

@property(nonatomic, retain) NSMutableArray *nextViewArray;

并在yourNextViewController.m文件中像下面这样合成..

@synthesize nextViewArray;

然后像下面这样昏倒..

      yourNextViewController *objNextView = [[yourNextViewController alloc]initWithNibName:@"yourNextViewController" bundle:nil];
      objNextView.nextViewArray = [[NSMutableArray alloc]init];
      objNextView.nextViewArray = yourDataArray;
      [objNextView.nextViewArray retain];
      [self.navigationController pushViewController:objNextView animated:YES];
      [objNextView release];

您也可以传递字符串或字典而不是数组..

于 2012-11-09T12:06:38.990 回答
0

您可以使用某种 DataManager 对象,在加载数据后在其中存储数据,以便在应用程序的任何位置轻松检索。如果您只需要在应用程序启动时加载数据一次即可。

诀窍是使它成为一个单例对象,因此无论您在应用程序中的哪个位置引用它,它都将是已经预加载数据的同一个实例。我在我的项目中经常使用这些来管理我在应用程序中需要的任何和所有数据。

那里有无数的例子

于 2012-11-09T12:08:00.597 回答
0

AppDelegate 更适合将数据从 (2) 传递到 (1)。要将数据从 (1) 加载到 (2),您可以使用与 (2) 加载相同的函数,因为 (1) 将 (2) 视为 viewController 的实例。就像这样:

//In OneViewController.m
-(void)viewDidLoad:(BOOL)animated{
    [super viewDidLoad:animated];

    TwoViewController *VCTwo = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];
    //note that I am only instantiating VCTwo, I am not displaying it.
}

-(void)loadVCTwoFromVCOne{
    [TwoViewController preloadInformation];
    //simply call the function to load the data on the instance of the viewController before displaying it
}

-(IBAction)presentVCTwo{
    [self presentViewController:VCTwo animated:YES completion:nil];
    //when you are ready, you can display at any time
}
于 2012-11-09T12:15:42.983 回答