ProgressPopUpView

Critizz

Aktives Mitglied
Thread Starter
Dabei seit
28.05.2012
Beiträge
1.136
Reaktionspunkte
22
Hallöchen Community ,

Wir ihr bereits sieht bin ich neu hier und bin gerade dabei Objective - C zu lernen.

So kommen wir zu meinem Problem...

Ich hab vorhin auf GitHub dieses " Framework " gefunden ( Ich weiß nicht ob man soetwas Framework nennt ).
Hab halt bissl. damit rumgespielt und auch versucht es in meinen eigenen Projekt einzubinden.
Leider ohne Erfolg.

Das " Framework " : https://github.com/alskipp/ASProgressPopUpView

Hier erstmal der Code : .M Datei :) :

Code:
//
//  ViewController.m
//  Progress
//
//  Created by Critizz on 30.04.14.
//  Copyright (c) 2014 Critizz. All rights reserved.
//

#import "ViewController.h"
#import "ASProgressPopUpView.h"


@interface ViewController ()
@property (weak, nonatomic) IBOutlet ASProgressPopUpView *progressView;


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	
    self.progressView.font = [UIFont fontWithName:@"Futura-CondensedExtraBold" size:26];
    self.progressView.font = [UIFont fontWithName:@"Futura-CondensedExtraBold" size:26];
    self.progressView.popUpViewAnimatedColors = @[[UIColor redColor], [UIColor orangeColor], [UIColor greenColor]];
    
    
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end



.H Datei - Kaum was drin :

Code:
//
//  ViewController.h
//  Progress
//
//  Created by Critizz on 30.04.14.
//  Copyright (c) 2014 Critizz. All rights reserved.
//

#import <UIKit/UIKit.h>




@interface ViewController : UIViewController





@end



So ich habe zwar keine Fehlermeldung doch wenn ich das Projekt im iOS Simulator starte, stürzt die App direkt an und ich kriege folgende Meldung in der Console :


Code:
2014-04-30 21:30:00.863 Progress[1746:60b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<ViewController 0x10921eef0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ASProgressPopUpView.'
*** First throw call stack:
(
   0   CoreFoundation                      0x0000000101bb3495 __exceptionPreprocess + 165
   1   libobjc.A.dylib                     0x00000001016b399e objc_exception_throw + 43
   2   CoreFoundation                      0x0000000101c37919 -[NSException raise] + 9
   3   Foundation                          0x0000000101294530 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
   4   CoreFoundation                      0x0000000101baf400 -[NSArray makeObjectsPerformSelector:] + 224
   5   UIKit                               0x00000001004bb8a6 -[UINib instantiateWithOwner:options:] + 1131
   6   UIKit                               0x0000000100355b0c -[UIViewController _loadViewFromNibNamed:bundle:] + 245
   7   UIKit                               0x0000000100356149 -[UIViewController loadView] + 112
   8   UIKit                               0x00000001003563b7 -[UIViewController loadViewIfRequired] + 75
   9   UIKit                               0x0000000100356777 -[UIViewController view] + 29
   10  UIKit                               0x000000010029696b -[UIWindow addRootViewControllerViewIfPossible] + 58
   11  UIKit                               0x0000000100296c70 -[UIWindow _setHidden:forced:] + 282
   12  UIKit                               0x000000010029fffa -[UIWindow makeKeyAndVisible] + 51
   13  UIKit                               0x000000010025bc98 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1788
   14  UIKit                               0x000000010025fa0c -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 660
   15  UIKit                               0x0000000100270d4c -[UIApplication handleEvent:withNewEvent:] + 3189
   16  UIKit                               0x0000000100271216 -[UIApplication sendEvent:] + 79
   17  UIKit                               0x0000000100261086 _UIApplicationHandleEvent + 578
   18  GraphicsServices                    0x0000000103d2b71a _PurpleEventCallback + 762
   19  GraphicsServices                    0x0000000103d2b1e1 PurpleEventCallback + 35
   20  CoreFoundation                      0x0000000101b35679 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
   21  CoreFoundation                      0x0000000101b3544e __CFRunLoopDoSource1 + 478
   22  CoreFoundation                      0x0000000101b5e903 __CFRunLoopRun + 1939
   23  CoreFoundation                      0x0000000101b5dd83 CFRunLoopRunSpecific + 467
   24  UIKit                               0x000000010025f2e1 -[UIApplication _run] + 609
   25  UIKit                               0x0000000100260e33 UIApplicationMain + 1010
   26  Progress                            0x0000000100004283 main + 115
   27  libdyld.dylib                       0x000000010224b5fd start + 1
   28  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

Kann mir jmd. sagen was ich falsch gemacht habe ?
 
"this class is not key value coding-compliant for the key ASProgressPopUpView.'"

Das heisst Du hast irgendwo im Interface Builder ein Outlet verbunden, dass Du nicht im ViewController deklaiert hast.
Falls Du das NIB/XIB/Storyboard aus einem Beispiel in Dein Projekt kopiert hast, ist das Dein Fehler.

Fang mit einem leeren StoryBoard an, erzeuge einen ViewController, werfe einen View rein.
Dann ändere die Klasse des Views auf den ASProgressPopUpView.
Erzeuge ein IBOutlet im ViewController Namens "progessView" damit "self.progressView" funktionert.
Dann verbindest Du den View mit dem Outlet und bist fertig.

EDIT:

Entschuldigung. Das outlet gibt es ja schon. Übersehen.
Das muss aber nicht in den "privaten Teil" des ViewControllers.
 
Das Projekt das ich gestern angelegt habe ist ja neu.
Kann ich nicht einfach irgendwas jetzt ändern oder muss ich komplett von vorne anfangen.
Gestern hab ich es so gemacht : Neues Projekt angelegt -> Die 4 .M und H. Dateien von GitHub feingeklatscht -> Code geschrieben.
 
Edit : Hab grad gemerkt dass der Developer einen Navigation Controller dazu verwendet hat... ich probiere mal mit einem Navigation Controller
 
Hmm? Nee, das hab ich gerade angelegt.
Du musst natürlich den Ordner mit den 4 Dateien in Dein Projekt hinzufügen.

Über "Files" -> "Add Files to <Projectname>"
Weiss nicht, wie das Menu auf Deutsch heisst.

EDIT: Nein, Du brauchst nur einen leeren ViewController und trägst die Klasse im Storyboard da auch ein.
"MainViewController" in meinem Beispiel.
 
Die 4 Files sind natürlich im Projekt drin.

Könnte ich dir vielleicht das Projekt auf MediaFire oder ähnliches hochladen und du schaust es dir mal an ?
 
klar. Besorg Dir doch auch mal einen DropBox account.
 
Sorry:

dropboxusercontent_ProgressNew.zip


1) Wie am Anfang gesagt:

Der "progressView@ muss in den public header und raus aus der privaten category:

ViewController.h

Code:
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet ASProgressPopUpView *progressView;

ViewController.m

Code:
@interface ViewController ()

// Das @property muss weg hier.

@end

2) Die Klasse vom View war nicht geandert. Im Interface Builder

(Bild im Anhang. Oben rechts im Inspector.)

3) Outlet neu verbinden.

4) Wert schonmal testen

Code:
- (void)viewDidAppear:(BOOL)animated
{
    self.progressView.progress = 0.35f;
}

Fertig.


EDIT:

Ach sorry. Du hattest die Dateien nicht ins Projekt kopiert sondern nur referenziert.
Du musst die nochmal löschen und den Haken beim "kopieren" setzen.

Sonst kommen sie aus dem Download folder.
 

Anhänge

  • Screen Shot 2014-05-01 at 17.52.09.jpg
    Screen Shot 2014-05-01 at 17.52.09.jpg
    22,7 KB · Aufrufe: 82
Hmm Bei mir sieht es jetzt so aus ... richtig ?
 

Anhänge

  • Bildschirmfoto 2014-05-01 um 18.04.39.jpg
    Bildschirmfoto 2014-05-01 um 18.04.39.jpg
    50,1 KB · Aufrufe: 106
Nee. Da sind 2 Verbindungen.
Lösch mal beide ... und setz eine wieder neu. Da ist ein X in der schwarzen Box.
Die mit dem Gross geschriebenen View ist falsch.
 
Okay, hab es jetzt glaub ich geschafft. Hab jetzt nur noch 1 Fehler bei der Folgenden Zeile :

@property (weak, nonatomic) IBOutlet ASProgressPopUpView *progressView;

Mit der Fehlermeldung :

Illegal redeclaration of property in class extension "ViewController" (attribute must be a "readwrite", while its primary must be "readonly)

Edit : Hab beide Verbindungen gelöscht hab jetzt nur noch 1 Verbindung trotzdem hab ich immer noch die Fehlermeldung
 
Ja, in der category in ViewController.m oben musst die Zeile raus.

Du hast sie ja in das öffentliche Interface geschoben.

Code:
#import "ViewController.h"
#import "ASProgressPopUpView.h"


@interface ViewController ()
@property (weak, nonatomic) IBOutlet ASProgressPopUpView *progressView;


@end

Die @property muss weg....
 
Ja, in der category in ViewController.m oben musst die Zeile raus.

Du hast sie ja in das öffentliche Interface geschoben.

Code:
#import "ViewController.h"
#import "ASProgressPopUpView.h"


@interface ViewController ()
@property (weak, nonatomic) IBOutlet ASProgressPopUpView *progressView;


@end

Die @property muss weg....


ENDLICH !!!!!!!!

Jetzt funktioniert es... !!

Weißt du zufällig wie ich es so machen kann dass es bei 0% anfängt und bei 100% aufhört ?
 
Ja, sicher. Aber der Sinn ist ja, dass man ihn mit Werten füttert.

Du kannst Dir einen NSTimer machen und den 100 mal feuern lassen...

Code:
- (void)fire
{
    CGFloat progress = self.progressView.progress;

    progress += 0.1f;

    if (progress < 1.0) {
        self.progressView.progress = progress;

        [NSTimer scheduledTimerWithTimeInterval:0.2f
                                          target:self
                                       selector:@selector(fire)
                                       userInfo:nil
                                        repeats:NO];
    }
}

- (void)viewDidAppear:(BOOL)animated
{
    self.progressView.progress = 0.0f;

    [self fire];
}
 
Okay und warum geht der jetzt nur bis 90% und nicht 100%


Edit : Hat sich schon erledigt.

Danke nochmal für deine Hilfe :)
 
Willst Du 1% musst Du aus dem "+= 0.1f" ein "+= 0.01f" machen.

EDIT: Weil das if < 1.0 testet.
 
Liest der jetzt auch eig. die % Werte aus ?

Also könnte ich jetzt eigentlich direkt dadrunter ein label machen, der darauf wartet dass der Progress 100% erreicht..

Also irgendwie if(progress == 100%) {

set.label = @" 100 % erreicht ";

}
 
Zurück
Oben Unten