Frage

Ich habe mich umgesehen und nach einer Lösung gesucht, um einen kleinen Offline-Datenspeicher in einer meiner Apps zu implementieren, der einfach und schnell zu verwenden ist.Wie auch immer, ich bin darauf gestoßen Reich um dies zu tun.Ich habe jedoch das Problem, dass der Inhalt der Datenbank jedes Mal, wenn ich meine App starte, null ist.

Ich mache die gesamte Zuteilung und rufe an beginWriteTransaction Methode.Legen Sie den Wert meiner Datenbankvariablen fest.Dann füge ich das Objekt hinzu Reich und schlussendlich commitWriteTransaction.

Also mache ich ein NSLog um zu sehen, ob der Wert tatsächlich richtig eingestellt ist (nachdem er in meiner App aktualisiert wurde).Aber wenn ich meine Anwendung heruntergefahren oder angehalten und im Xcode-iPhone5-Simulator erneut ausgeführt habe.Ich versuche, in der viewDidLoad-Methode den Wert aus der Datenbank auf eine globale Variable in meiner App festzulegen.Ich führe ein NSLog durch, um zu überprüfen, ob der Wert entweder in meiner Datenbank oder in der globalen Variablen vorhanden ist, aber als Null angezeigt wird, was bedeutet, dass er nicht gespeichert/gespeichert wird.

Das ist der Code..

@interface iReceiptDataBase : RLMObject

@property NSString* receiptNo;

@end

RLM_ARRAY_TYPE(iReceiptDataBase)

@implementation iReceiptDataBase

@end

//******** View Controller Implementation ************

- (void)viewDidLoad {

    self.realm = [RLMRealm defaultRealm]; // property type RLMRealm
    [realm beginWriteTransaction];

    self.myDataBase = [[iReceiptDataBase alloc] init]; // property type iReceiptDataBase
    receiptNumber = [myDataBase.receiptNo intValue];

    NSLog(@"In my realm database(first call) -> %@", myDataBase.receiptNo);

    NSLog(@"In my local app(first call) -> %d", receiptNumber);

}

-(void)drawPDF:(NSString*)fName {

    receiptNumber += 1; // property type int

    myDataBase.receiptNo = [NSString stringWithFormat:@"%d", receiptNumber];

    NSLog(@"In my realm database(second call) -> %@", myDataBase.receiptNo);

}

- (void)viewWillDisappear:(BOOL)animated {

    [realm addObject:myDataBase];

    [realm commitWriteTransaction];

}

Ich werde auch alle anderen Optionen in Betracht ziehen, um dies zu erreichen.Danke!

*****UPDATE!** Das bekomme ich in meinem Test, den ich geändert habe beginWriteTransaction Und commitWriteTransaction in beiden Methoden, funktioniert aber immer noch nicht.Es erhält den Wert, den ich in meiner App bereitstelle, aber wenn ich erneut darauf zugreife, wird dieser Wert nicht aus der Datenbank abgerufen/abgerufen, falls er jemals gespeichert wurde.

Screenshot of Xcode 6 showing NSLog and part of the code

War es hilfreich?

Lösung

Das Problem mit Ihrem Realm-Objekt besteht darin, dass Sie den Realm nicht nach Ihrem Objekt abfragen.Vielmehr weisen Sie lediglich ein neues zu iReciptDataBase Objekt.Sie müssen diesem Objekt zunächst eine Eigenschaft hinzufügen, damit Sie danach eine Abfrage durchführen können, etwa „ databaseId hier gezeigt:

@interface iReceiptDatabase : RLMObject
@property NSString *receiptNo;
@property NSString *databaseId;
@end

@implementation iReceiptDatabase
@end

RLM_ARRAY_TYPE(iReceiptDatabase)

Dann fragen Sie in Ihrem viewDidLoad zunächst die Realm-Datei nach einem vorhandenen Objekt ab und ordnen es erst zu, nachdem Sie es nicht gefunden haben:

- (void)viewDidLoad {
    [super viewDidLoad];

    RLMRealm *realm = [RLMRealm defaultRealm];
    iReceiptDatabase *myDatabase = [[iReceiptDatabase objectsWhere:@"databaseId = '1'"] firstObject];

    if(!myDatabase) {
        [realm beginWriteTransaction];
        myDatabase = [[iReceiptDatabase alloc] init];
        myDatabase.receiptNo = @"1";
        myDatabase.databaseId = @"1";
        [realm addObject:myDatabase];
        [realm commitWriteTransaction];
    }

    //...
}

Andere Tipps

Meine Vermutung wäre generakodicetagcode wird niemals aufgerufen.Ich würde empfehlen, Ihre Schreibtransaktion nach jeder Änderung an Ihre Daten zu begangen, anstatt die Transaktion zu hinterlassen, sofern die Ansicht sichtbar ist, anstatt das Objekt am Ende hinzuzufügen, können Sie Ihre anderen Methoden ändern, um die Daten zu begehen:

. generasacodicetagpre.

Ich würde auch in Betracht ziehen, den Empfang nicht als int auf Ihrem Datenmodell zu speichern.

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