Return CFBitVector

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Return CFBitVector

    Servus zusammen,

    da meine Frage in (SQlite Blob to Array) quasi abgeschlossen ist hoffe ich, dass es in Ordnung ist hier eine Anschlußfrage zu stellen.

    Ich probiere gerade aus mit einem CFBitVector zu arbeiten, habe dabei aber folgendes Problem:

    In einer Methode erstelle ich den Mutable BitVector und will diesen dann an eine andere Methode übergeben... leider kommt dort nur Quatsch an.

    Beispiel:

    Quellcode

    1. //Diese Methode liegt im TestObject
    2. -(CFmutableBitVectorRef)createTheVectorMethod{
    3. CFMutableBitVectorRef testVector = CFBitVectorCreateMutable(NULL, 30000);
    4. //DO SOME WORK LIKE:
    5. CFBitVectorSetBitAtIndex(testVector, 10,1);
    6. ...
    7. //Here comes the Test:
    8. int counter =0;
    9. for(int i = 0;i<30000;i++){
    10. if(CFBitVectorGetBitAtIndex(kapputerVector,i))
    11. counter++
    12. }
    13. NSLog(@"Counterwert bei Test1: %i,counter);
    14. return testVector;
    15. }
    16. //Diese Methode rufe ich woanders auf...
    17. -(void)callingMethod{
    18. CFMutableBitVectorRef kaputterVector = [TestObject createTheVectorMethod];
    19. //Here comes the Test:
    20. int counter =0;
    21. for(int i = 0;i<30000;i++){
    22. if(CFBitVectorGetBitAtIndex(kapputerVector,i))
    23. counter++
    24. }
    25. NSLog(@"Counterwert bei Test2: %i,counter);
    26. }
    Alles anzeigen




    Und das Problem ist, dass die Ausgabe von Test1 != Test2 ist....
    Anscheinend verweist die übergebene Referenz des BitVectors auf irgend einen anderen Speicherbereich.
    Habe schon viel rumprobiert die letzte Nacht aber ich bekomm das nicht hin.
    Wie mache ich das richtig?



    LG Marc


    EDIT: Tippfehler im Code korrigiert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von eratical ()

  • Hallo,

    daran liegt es leider nicht. Habe den Code oben eben schnell reingeschrieben und nicht kopiert.
    Im richtigen Code habe ich mit CFBitVectorGetBitAtIndex gearbeitet...

    EDIT: Habe gerade im Apple Developer Forum gelesen, dass der CFBitVector sowieso nicht so richtig funktioniert und buggy sein soll.
    Da bleibt mir also nur der Weg statt Bit halt Byte zu verwenden.
    Habe da aber noch folgendes Problem, wenn ich ein BOOL * aus meiner SQLite DB raushole, haben sich die Werte verändert.
    Ich denke ich mache da was falsch beim initialisieren?!?!
    Hier der Code:

    Quellcode

    1. - (BOOL *)getCompForPicID:(int)PicID{
    2. if(!isOpened)
    3. [self openDatabase];
    4. sqlite3_stmt *statement;
    5. NSString * queryString = [NSString stringWithFormat:@"SELECT PICTURE from picture_table WHERE PICTURE_ID = '%i';",PicID];
    6. const char *query = [queryString UTF8String];
    7. BOOL * returnBoolArray; //<- muss ich hier nicht die Größe direkt angeben?
    8. if(sqlite3_prepare_v2(database, query, -1, &statement, 0) == SQLITE_OK) {
    9. if(sqlite3_step(statement) == SQLITE_ROW) {
    10. //Erst die Bytes auslesen und diese dann mit einer selbst geschriebenen Methode in BOOL* konvertieren
    11. UInt8 * temp = (UInt8 *)sqlite3_column_blob(statement, 0);
    12. returnBoolArray = [self byte2BoolArray:temp roiSizeWidth:100];
    13. sqlite3_finalize(statement);
    14. }
    15. }
    16. return returnBoolArray;
    17. }
    Alles anzeigen



    EDIT: Verrückt, habe nicht geändert und jetzt scheint es zu klappen... Sollten im Code dennoch Fehler sein bitte melden :)


    LG Marc

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von eratical ()