Frage

Mein Problem ist folgendes: Ich kann nicht die Variable todaysDate von den numberForPlot oder numberOfRecordsForPlot Funktionen zugreifen scheinen (siehe unten für numberForPlot), aber ich kann in der Datei von anderswo.

Die NSLog im viewDidLoad funktioniert perfekt, das Datum richtig eingestellt ist. Wenn ich die Variable aus meinen eigenen Klasse-Funktionen zugreifen, dann ist das auch in Ordnung und es funktioniert. Allerdings, wenn ich versuche, darauf zuzugreifen aus numberForPlot ich einen Fehler:

  

Programm empfangene Signal. „EXC_BAD_ACCESS“

In meiner Header-Datei, ich habe die folgende -. Anmerkung meiner Klasse implementiert CPPlotDataSource

#import <UIKit/UIKit.h>
#import "CorePlot-CocoaTouch.h"

@interface ResultsGraphViewController : UIViewController <CPPlotDataSource> {
    NSManagedObjectContext *managedObjectContext;
    CPXYGraph *graph;
    NSMutableArray *eventsArray;
    NSDate *todaysDate;
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSMutableArray *eventsArray;
@property (nonatomic, retain) NSDate *todaysDate;

- (void)getEvents;
- (void)configureGraph;

@end

In der Implementierungsdatei, ich habe (relevante Highlights nur):

@synthesize managedObjectContext;
@synthesize eventsArray;
@synthesize todaysDate;

und

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setTitle:@"Results"];

    todaysDate = [NSDate date];
    NSLog(@"Set today's date to %@", todaysDate);
    [self getEvents];
    [self configureGraph];
}

und

-(NSNumber *)numberForPlot:(CPPlot *)plot 
 field:(NSUInteger)fieldEnum 
 recordIndex:(NSUInteger)index 
{ 
NSLog(@"%d events in the array.", [eventsArray count]);
NSLog(@"today's date is %@.", todaysDate);

...

}

(in den letzten beiden Zeilen vor, die Anzahl der Ereignisse in dem Array ausgegeben erfolgreich, aber die letzte Zeile bewirkt, dass der Fehler).

Alle Ideen, warum dies ein Problem, und wie kann ich es umgehen? Ich, dass es etwas vorstellen, mit dem zu tun, die CPPlotDataSource zu sein - wie funktioniert das Affekt Scoping?

Oder muss ich nur einen Fehler in meinem Code? Alle Hilfe sehr geschätzt!

War es hilfreich?

Lösung

Das Problem ist, dass [NSDate date] kehrt ein Autoreleased Objekt, das Sie nicht festhalten. Es wird bis zum Ende des aktuellen Zyklus der Laufschleife hängen (warum sie nicht sofort in allen ersten NSLog() Anweisung nicht abstürzen), dann wird es veröffentlicht. Wenn Sie versuchen, es in -numberForPlot: zuzugreifen, wurde freigegeben und Ihre Anwendung abstürzt.

Um dies zu beheben, die Zeile in -viewDidLoad ändern lesen

self.todaysDate = [NSDate date];

Sie definiert todaysDate eine Eigenschaft mit dem retain Attribut zu sein, so das Ihr Datum behalten. Denken Sie daran, eine [todaysDate release] in Ihrer -dealloc Methode hinzufügen, um ein Leck zu verhindern.

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