Mathe Parser

D

Damasus

Mitglied
Thread Starter
Dabei seit
29.12.2011
Beiträge
22
Reaktionspunkte
0
Hallo zusammen,

ich hab einen schönen Mathe Parser gefunden "DDMathParser".
Dieser Parser würde genau meinen Zweck erfüllen, aber er läuft leider nicht und ich habe keine Ahnung warum.
Die Dateien habe ich runtergeladen. Wie in der Anleitung beschrieben, habe ich den Ordner "DDMathParser" in mein Projekt kopiert und per
Code:
#import "DDMathParser/DDMathParser.h"
eingebunden.
Der Compiler schmeißt auch keine Fehlermeldung.
Sobald ich aber etwas versuche, wie z.B.
Code:
    NSLog(@"%@", [@"1 + 2" numberByEvaluatingString]);
führt es zu einem Crash.

Habe die Compiler Versionen durchprobiert, aber nichts hat funktioniert.
Kennt jemand das Problem oder eine Lösung dazu?
 
der wird dann beim aufruf des parsers crashen.
wie hast du den denn instanziiert?
 
Ja gut die zweite Zeile sollte ja in der Form schon funktionieren, oder etwa nicht?
 
nein, NSString hat keine solche methode, daher wohl auch der crash...
wird wohl erst durch überladen durch den parser existieren...
 
Wenn der Parser eine Category für NSString hat, dürfte der obige Methodenaufruf eigentlich OK sein.
Du kannst Dir in Console.app (bzw. Xcode) den Callstack ansehen. Dann weisst Du, in welcher Methode/Funktion das Programm crasht.
 
iOS oder OS X? Stativ Lib, Framework oder direkt gebauter Code?

Frage über Fragen... was sagt die Konsole?

Alex
 
Für iOS, direkt gebauter Code
Das Programm crasht defintiv an der Zeile, die Methode gibt es und alles Meldung kommt "Thread 1: Programm received signal: "SIGABRT". In der Konsole kommt "terminate called after throwing an instance of 'NSException'"
 
Uses the [DDMathEvaluator sharedMathEvaluator] and all functions registered with it.
Existiert der sharedMathEvaluator denn?
 
klar, wird ja alles mit eingebunden
 
splitte es doch mal auf, damit du siehst wo der crash genau passiert.
Code:
NSString *test=@"1+2";
NSNumber *nummer=[test numberByEvaluatingString];
NSLog(@"%@", nummer);
bei nummer musst du mal das objekt anpassen, k.a. was numberByEvaluatingString zurück gibt.
 
der Fehler kommt bei
Code:
    NSNumber *nummer=[test numberByEvaluatingString];
numberByEvaluatingString gibt eine NSNumber zurück.
Also das stimmt schon mal.
Wie gesagt bei der obigen Zeile schmeißt er die NSException.
 
Hmm zum Beispiel bei:
Code:
    DDParser *parser = [DDParser parserWithString:@"2 ** 3 ** 2"];
sagt der Compiler, dass er die Methode nicht findet, was sehr komisch ist.

aber den benötige ich ja, für meinen "Log" Aufruf nicht.
 
Setz mal einen Breakpoint auf alle Exception throws (TFM)

Alex
 
Bin nun etwas weiter, ein Fehler war schon mal, dass ich den Ordner nicht in mein Projekt (in Xcode) gemacht habe.
Jetzt kommt bei der Ausführung acht Fehler, alle Fehler in folgender Methode:
Code:
- (BOOL)resolveWithParser:(DDParser *)parser error:(NSError *__autoreleasing *)error {
#pragma unused(parser)
ERR_ASSERT(error);
if ([self operatorArity] == DDOperatorArityUnary) {
if ([[self token] operatorAssociativity] == DDOperatorAssociativityLeft) {
*error = ERR(DDErrorCodeUnaryOperatorMissingLeftOperand, @"no left operand to unary %@", [self token]);
} else {
*error = ERR(DDErrorCodeUnaryOperatorMissingRightOperand, @"no right operand to unary %@", [self token]);
}
} else {
*error = ERR(DDErrorCodeOperatorMissingOperands, @"missing operands for operator: %@", [self token]);
}
return NO;
}


Veschiedene Fehler kommen: u.a.
Expected ')' before '__autoreleasing'
Incompatible types in assignment
Assigning to 'NSError' from incompatible type 'id'

Lösungsvorschläge?
 
Ja. Der Code ist wahrscheinlich für Auto-Retain-Count (ARC), das musst Du bei Dir aktivieren

Alex
 
ok, verstehe ich, aber ich finde das ARC nirgends, also bei den Build Settings gebe ich 'automatic' ein und eigentlich müsste es bei dem "gefilteren" Möglichkeiten stehen. Tut es aber nicht
 
Das Ding heisst "Automatic Reference Counting". Welche Version von Xcode hast Du? Welches Base SDK?

Alex
 
Xcode 4.0.2
MAC OS X 10.6 Snow Leopard and iOS 4
 
OK, der kann kein ARC. Bietet der Mensch den Sourcecode auch ohne ARC an?

Alex
 
Zurück
Oben Unten