2 Stimmen

main in meiner NSOperation-Unterklasse wird nicht aufgerufen

Ich habe NSOperation als Unterklasse angelegt und die Hauptmethode implementiert. Als ich sie zu einer NSOperationQueue hinzufügte, wurde sie nicht aufgerufen. Ich habe sie mit Beispielcode und Beispielprojekten verglichen, die tun und konnte nicht erkennen, wo das Problem lag. Hat jemand Erfahrung mit diesem Problem und weiß, was es verursacht?

Nachdem ich mich bei der Suche nach dem Problem verrückt gemacht hatte, beschloss ich, noch einmal von vorne anzufangen, meine Klasse neu zu erstellen und sie in jedem Schritt zu testen. In der Kopfzeile habe ich sie als Unterklasse von NSOperation deklariert. In der Implementierungsdatei habe ich main implementiert und nur ein paar Zeilen eingefügt: sleep(3) ; NSLog..; . Alles gut. Jeder Schritt funktionierte, als ich anfing, Eigenschaften hinzuzufügen, sogar Delegierte zu deklarieren, usw.

Schließlich fügte ich in der Hauptdatei Code ein, um NSDirectoryEnumerator zu verwenden. Plötzlich wurde main überhaupt nicht mehr aufgerufen. Und nicht nur das, als ich den Code wieder herausnahm, funktionierte es immer noch nicht!!! Ich habe versucht, XCode 4 neu zu starten, meinen Rechner neu zu starten (nicht dass ich wüsste, warum das helfen könnte, aber mir gehen die Ideen aus), aber alles ohne Erfolg.

Für jeden Hinweis wären wir sehr dankbar. Danke!


Update: Ich habe (wieder!) von vorne angefangen, aber dieses Mal habe ich die Teile in einer anderen Reihenfolge zusammengebaut... und jetzt funktioniert es! Für den Fall, dass ich trotzdem etwas falsch mache und dieses Mal einfach nur Glück hatte, hier der @Interface-Abschnitt, wie von @Andrew vorgeschlagen:

@class ScanOperation;

@protocol ScanOperationDelegate 
-(void)fileFound:(ScanOperation *)operation;
-(void)finishedScanOperation:(ScanOperation *)operation;
@end

#import <Foundation/Foundation.h>

@interface ScanOperation : NSOperation {
@private
    NSObject <ScanOperationDelegate> *delegate;
    NSURL *rootUrl;
    int totCount, dirCount, filCount, errCount;
    NSTimeInterval elapsed;
}
- (id)initWithScanRootUrl:(NSURL *)startAtUrl;

@property (readwrite, assign) NSObject <ScanOperationDelegate> *delegate;
@property (readonly) int totCount, dirCount, filCount, errCount;
@property (readonly) NSTimeInterval elapsed;
@end

1voto

user1107201 Punkte 63

Das ist mir auch schon passiert. Wie üblich lag es an mir: Ich hatte die OperationQueue nicht initialisiert, damit die Operation darauf läuft.

0voto

smellflower Punkte 11

Diese Frage ist mir gerade erst begegnet. 1) initialisieren Sie die OperationQueue 2) fügen Sie Ihre Operation zu dieser Warteschlange hinzu 3) bereinige dein Projekt 4) Ausführen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X