Ich habe eine Objective-C-Klasse geschrieben und verwende eine gemeinsame Instanz für mehrere Ansichten in meinem iPhone-Projekt. Seine Mitgliedsvariablen umfassen bools, ints, NSStrings und eine NSNumber. Die gemeinsam genutzte Instanz scheint über den gesamten Umfang meiner Anwendung hinweg gut zu funktionieren, mit Ausnahme der NSNummer, von der der Debugger sagt, dass sie "außerhalb des Gültigkeitsbereichs" ist, sobald auf die gemeinsam genutzte Instanz zum zweiten oder nachfolgenden Mal zugegriffen wurde.NSNumber nicht verfügbar?
Hier ist ein kurzer Überblick über, was ich tue ...
// UserData.h
@interface UserData : NSObject {
TaxYears selectedTaxYear;
NSNumber *grossWage; // <--- this is the troublesome member
// ...
NSString *other;
int age;
}
+ (UserData *)getSharedUserData;
@end
// UserData.m
#import "UserData.h"
@implementation UserData
static UserData *sharedUserData = nil; // Points to the shared object
+ (UserData *)getSharedUserData {
if(sharedUserData == nil) {
sharedUserData = [[UserData alloc] initWithTaxYear:0];
[[NSNotificationCenter defaultCenter]
addObserver:sharedUserData
selector:@selector(doTerminate:)
name:UIApplicationWillTerminateNotification
object:nil];
}
return sharedUserData;
}
- (id)initWithTaxYear:(TaxYears)theTaxYear {
if ((self = [super init])) {
}
return self;
}
- (void)updateGrossWage:(NSNumber *)theGrossWage {
grossWage = theGrossWage;
}
- (NSNumber *)getGrossWage {
return grossWage;
}
// ...
@end
So ist es in einer Ansicht wie folgt zugegriffen:
UserData *userData
userData = [[UserData getSharedUserData] retain];
Und in einer anderen Ansicht auf die gleiche Weise. Aber beim zweiten Zugriff ist das Mitglied von growWage nicht mehr im Einsatz, aber alles andere ist in Ordnung - deshalb bin ich ratlos. Irgendwelche Ideen?
Ich habe die Accessoren geschrieben, wie ich es am Anfang erwartet habe, dass ich Casting oder andere Manipulationen an den Mitgliedern durchführen möchte ... aber jetzt sieht es so aus, als könnte ich sie der Einfachheit halber beseitigen. Ich habe gerade versucht, die Accessor-Methode zu umgehen, die growWage als @property zu definieren und sie direkt zu setzen und es scheint den Trick geschafft zu haben ... vielen Dank! Wenn sich herausstellt, dass dies nicht das Problem war, komme ich zurück. Sieht so aus, als müsste ich etwas mehr über die Speicherverwaltung lesen. – moigno