Моя проблема заключается в получении информации от контроллера (который, случается, с моим rootViewController) к другому представлению. Пытаясь получить доступ к нему через делегат приложения, я не смог заставить его работать. Я нашел, как это сделать, но этот inturn создал еще одну проблему: получить представление внутри модального контроллера представления для фактического отображения данных. Ниже я опубликовал как информацию appDelegate, так и код решения NSMutable Dictionary для тех, кому может понадобиться помощь.AppDelegate Доступен из разных классов, от RootController.m
Я пробовал больше недели, чтобы решить эту проблему самостоятельно. Моя проблема закончилась тем, что я получил доступ к appDelegate, поэтому у меня возникла проблема с NSDictionary. Поэтому в конце концов вопрос был не NSDictionary, хотя, если бы я пошел дальше, это было бы проблемой, я уверен.
Во-первых, я хотел бы поблагодарить TechZen за то, что он помог мне увидеть, что я над программированием, и назовите меня в правильном направлении.
Вот что я узнал.
Назначьте свою переменную в appDelegate.
AppDelegate.h
@interface AppDelegate : NSObject < UIApplicationDelegate, UINavigationControllerDelegate >
{
UIWindow *window;
UINavigationController *navController;
// Array to store the Makers Objects
NSMutableArray *makers;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@property (retain, nonatomic) NSMutableArray *makers;
@end
AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
makers = [[NSMutableArray alloc] init] ;
}
В ViewController.m назначить переменную в AppDelegate. Я сделал это внутри функции tableView didSelectRowAtIndexPath.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
// The line below loads it into the variable, the one above takes it and makes it available for other view Controllers.
Maker *maker = (Maker *)[appDelegate.makers objectAtIndex:indexPath.row];
// the combination of the above and below also loads the information into another array in this view controller, defined in an NSObject Controller called Maker (.h and .m files)
maker = [self.Makers objectAtIndex:indexPath.row];
Теперь на ваш взгляд контроллера вы хотите загрузить переменную из AppDelegate, установите его, как это.
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Maker.h"
@class AppDelegate;
@interface DetailsViewController : UIViewController
{
AppDelegate *dappDelegate;
DetailsViewController *detailsView;
IBOutlet UITextView *makerDescription;
}
@property (retain, nonatomic) AppDelegate *dappDelegate;
@property (nonatomic, retain) DetailsViewController *detailsView;
@property (nonatomic, retain) IBOutlet UITextView *makerDescription;
@end
и в файле viewController.m;
#import "DetailsViewController.h"
#import "AppDelegate.h"
@synthesize dappDelegate;
- (void)viewWillAppear:(BOOL)animated // or ViewDidLoad not sure which is better.
dappDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSString *newLocalVariable = [dappDelegate.makers description];
NSLog(@"newLocalVariable: %@", [dappDelegate.makers description]);
// This is for verifying you have it loaded. 'description' is defined in the Maker NSObject, see below for those files, and above for where it was assigned originally
..... и назначьте его тем, что вы хотите сейчас!
Надеюсь, это поможет всем. Вы могли бы в этот момент отбросить NSArray оттуда в NSDictionary, но теперь доступ теперь имеет ключи и значения, поэтому на данный момент немного сложнее получить доступ, но, конечно, преимущества. Я просто не могу полностью это сделать, и отступил от этого метода, чтобы просто использовать NSArray.
Ниже приведен образец файлов производителей и файлов m, которые вы также можете увидеть.
Maker.h
@interface Maker : NSObject
{
NSString *name;
NSString *address;
NSString *city;
NSString *postalcode;
NSString *country;
NSString *phonenumber;
NSString *email;
NSString *description;
NSString *services;
NSString *website;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *address;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, copy) NSString *postalcode;
@property (nonatomic, copy) NSString *country;
@property (nonatomic, copy) NSString *phonenumber;
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *description;
@property (nonatomic, copy) NSString *services;
@property (nonatomic, copy) NSString *website;
- (id)initWithName:(NSString *)n address:(NSString *)a city:(NSString *)c postalcode:(NSString *)z country:(NSString *)o phonenumber:(NSString *)p email:(NSString *)e description:(NSString *)d services:(NSString *)s website:(NSString *)w;
@end
и его файл Maker.m;
#import "ViolinMaker.h"
@implementation Maker
@synthesize name, address, city, postalcode, country, phonenumber, email, description, services, website;
- (id)initWithName:(NSString *)n address:(NSString *)a city:(NSString *)c postalcode:(NSString *)z country:(NSString *)o phonenumber:(NSString *)p email:(NSString *)e description:(NSString *)d services:(NSString *)s website:(NSString *)w;
{
self.name = n;
self.address = a;
self.city = c;
self.postalcode = z;
self.country = o;
self.phonenumber = p;
self.email = e;
self.description = d;
self.services = s;
self.website = w;
return self;
}
@end
Я надеюсь, что это помогает другим получить это прямо, как это действительно стоило мне много времени, и я надеюсь, что вы можете получить немного от того, что я узнал.
С уважением, Кирк
В чем вопрос? Вы отредактировали его? –