私は小さな配列ではないAppDelegateから読んでいます。ビュー間でnsarray(3.1Mサイズ)を共有する正しい方法
NSArray *mycountryspecific = [[NSArray alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"nextTwoWeekEvents" withExtension:@"ary"]];
self.myCountrySpecificCodesList = mycountryspecific;
[mycountryspecific release],mycountryspecific = nil;
メモリでそれを保つために、私は、プロパティ
@property (nonatomic, retain) NSArray *myCountrySpecificCodesList;
を宣言した。しかし、メインビューから私はイベント詳細ビューコントローラ場所を持つことになりますイベントコントローラの下で、それを使用しますながら2つの段階に行かなければなりませんこの配列の必須部分(述語に基づく)になります。
私の現在のデザインは、AppDelegateではなく、必要に応じてイベント詳細ビューコントローラからの読み取り配列です。
あなたは経験を共有できますか? appdelegateからロード配列を読み込み、メモリに保持する方が良い場合は、メモリリークのないクラス間でアクセスプロパティを送信する正しい方法をアドバイスしてください。
EventsTableViewController *events = [[EventsTableViewController alloc] initWithNibName:@"EventsTableViewController" bundle:nil];
self.eventListController = events;
PromoView *promo = [[PromoView alloc] initWithNibName:@"PromoView" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] init];
[navigationController pushViewController:events animated:NO];
UITabBarController *tabBar = [[UITabBarController alloc] init];
self.tabBarController = tabBar;
[tabBar setViewControllers:[NSArray arrayWithObjects:navigationController,promo,nil]];
eventListController.managedObjectContext = self.managedObjectContext;
[self.window addSubview:tabBarController.view];
SOLUTION 私のコントローラとのいくつかの演奏の後、私は解決策を見つけることでした。 詳細なページを表示するたびに、ファイルから配列を読み込みますが、今はこれが辞書です。ここでキーは最初に見つかった配列であり、この配列の配列は必要な結果です。 配列は、34Kにトランサーだったとキーケースの集中検索を行うコードは、次のとおりです。この方法では
;-)エミュレータ上ではるかに優れた、iPhoneの3Gに:)もちろんうまく機能しているNSDictionary *mycountryspecific = [[NSDictionary alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"countryspecific" withExtension:@"dict"]];
NSSet * mySet = [mycountryspecific keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
if([key compare:countryName options:NSCaseInsensitiveSearch] == NSOrderedSame) {
return YES;
}
else
return NO;
}];
NSArray *result = [mycountryspecific valueForKey:[mySet anyObject]];
現在、私はコアデータを持っていますが、私は3つのバージョンのソフトウェアを持っています。これらの理由から、私は一時的なデータを追加して、将来的に不要なエンティティを増やすことを避けたいと考えています。 – Alex
@Alex - '-mergedModelFromBundles:'を使ってコアデータスタックを設定するときに、この一時的なデータストアだけのオブジェクトモデルを作成し、それを共通モデルとマージすることができます。それはあなたの共通のモデルからこれを保つでしょう、しかしあなたはここでそれを使用させます。 –