Als meine UIViewController eine NSArray in meinem AppDelegate von einem IBAction greift stürzt das Programm

StackOverflow https://stackoverflow.com/questions/2803154

Frage

Ich habe ein paar UIViewControllers, dass ich ein Array in meinem AppDelegate zuzugreifen versuchen. Wenn ich eine IBAction UIButton und in dieser Methode verwende ich Zugang meines AppDelegate leise mein Programm stirbt. Nichts in der Ausgabe oder dem Debugger, es hält nur. Wenn ich es mehrmals laufen kann ich sehen, dass es das Array ausfällt richtig zugreifen zu können.

Um dieses Problem zu untersuchen ich eine sehr einfache Anwendung erstellt.

In meinem AppDelegate.h ich erklärt und Satz Eigenschaften für das Array

#import <UIKit/UIKit.h>
@class MyViewController;
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MyViewController *viewController;
    NSArray *images;
}
@property (nonatomic, retain) NSArray *images;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MyViewController *viewController;`

In der AppDelegate.m I synthetisiert und initialisiert die NSArray (auch sorgte dafür, dass die Bilder auf den Ordner Ressourcen hinzugefügt wurden).

@synthesize images;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    images = [NSArray arrayWithObjects:
        [[NSBundle mainBundle] pathForResource:@"bamboo_nw" ofType:@"jpg"],
        .....
        nil];
    NSLog(@"init images size:%i",[images count]); 
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
    return YES;
}

In meinem UIViewController.h Ich habe Klasse, importiert Header-Datei deklariert und Eigenschaften für meine AppDelegate Zeiger.

#import <UIKit/UIKit.h>
#import "MyAppDelegate.h"
@class MyAppDelegate;
@interface MyViewController : UIViewController {

MyAppDelegate * mainDelegate;  IBOutlet UIButton MyButton;     }     @property (nonatomic behalten) MyAppDelegate mainDelegate;     @property (nonatomic behalten) UIButton * MyButton;     - (IBAction) doSomething; `

In meinem UIViewController.m ich synthesize und assign meine AppDelegate. Ich habe eine IBAction, die dieselbe Zählung der NSArray aus dem AppDelegate lügt wird.

#import "MyViewController.h"
#import "MyAppDelegate.h"
@implementation MyViewController
@synthesize mybutton;
- (void)viewDidLoad {
    mainDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSLog(@"vdl images size:%i",[mainDelegate.images count]);
    [super viewDidLoad];
}
-(IBAction) doSomething {

NSLog (@ "ds Bilder Größe:% i", [mainDelegate.images count]);     }

ich die Größe des NSArray in der AppDelegate drucken, wenn ich es schaffen, in dem Viewcontroller, wenn ich zum ersten Mal meiner AppDelegate Zeiger zuweisen, und dann als Ergebnis meiner IBAction.

ich das jedes Mal finde ich die Taste, um das Programm stirbt getroffen. Am dritten Mal traf ich den Knopf, sah ich, dass es mein IBAction lief aber meine Array-Größe als 1 anstelle von 8. Bin ich etwas fehlt gedruckt? Auch, warum nicht ich Stack-Traces oder etwas zu bekommen, der Debugger nur stirbt leise?

Vielen Dank im Voraus für jede Hilfe!

Debugger-Konsole Ausgang für 3 läuft:

[Session started at 2010-05-10 06:21:32 -0700.]
2010-05-10 06:21:44.865 My[59695:207] init images size:8
2010-05-10 06:21:47.246 My[59695:207] vdl images size:8

[Session started at 2010-05-10 06:22:15 -0700.]
2010-05-10 06:22:18.920 My[59704:207] init images size:8
2010-05-10 06:22:19.043 My[59704:207] vdl images size:8

[Session started at 2010-05-10 06:22:23 -0700.]
2010-05-10 06:22:25.966 My[59707:207] init images size:8
2010-05-10 06:22:26.017 My[59707:207] vdl images size:8
2010-05-10 06:22:27.814 My[59707:207] ds images size:1
War es hilfreich?

Lösung

Sie müssen self.images als L-Wert in application:DidFinishLaunchingWithOptions: verwenden, nämlich:

@synthesize images;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions {    
    self.images = [NSArray arrayWithObjects:
        [[NSBundle mainBundle] pathForResource:@"bamboo_nw" ofType:@"jpg"],
        .....
        nil];
    NSLog(@"init images size:%i",[images count]); 
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
    return YES;
}

Wenn Sie die Ivar images ohne self, Sie geben die Güte der automatischen Beibehaltung up, dass Sie einrichten, wenn Sie die @property erstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top