2016-04-12 19 views
-1

Mein Code macht, ist:Sigabart Fehler, die keinen Sinn

import UIKit 

class BreakOutViewController: UIViewController, UICollisionBehaviorDelegate 
{ 
    var blockArray: [Block] = [] 
    var allViewsArray: [UIView] = [] 
    var screenWidth = (Float)(UIScreen.mainScreen().bounds.width) 
    var screenHight = (Float)(UIScreen.mainScreen().bounds.height) 
    var blockCount = 0 
    var dynamicAnimator = UIDynamicAnimator() 
    var ballArray : [UIView] = [] 
    var collisionBehavior = UICollisionBehavior() 

// var paddle = Block(frame: CGRect(x: 140, y: 645, width: 150, height: 10)) 
// var ball = Block(frame: CGRect(x: 197, y: 614, width: 30, height: 30)) 
    var paddle = UIView() 
    var ball = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     dynamicAnimator = UIDynamicAnimator(referenceView: view) 

     createBlocks() 
     createPaddle() 
     createBall() 
     giveDynamicProperties() 
    } 

    func createBlocks() 
    { 
     var xPosition = 10 
     var yPosition = 20 
     let blockWidth = (Int(screenWidth - 55)/5) 
     let blockHeight = 20 

     for rows in 1...10 
     { 
      for columns in 1...7 
      { 
       var drand1 = CGFloat(drand48()) 
       var drand2 = CGFloat(drand48()) 
       var drand3 = CGFloat(drand48()) 
       var block = Block(frame: CGRect(x: xPosition, y: yPosition, width: blockWidth, height: blockHeight)) 
       view.backgroundColor = UIColor.cyanColor() 
       block.backgroundColor = UIColor(red: drand1, green: drand2, blue: drand3, alpha: 1) 
       view.addSubview(block) 
       allViewsArray.append(block) 
       blockArray.append(block) 
       ++blockCount 
       xPosition += (blockWidth + 10) 
      } 


      xPosition = 10 
      yPosition += (blockHeight + 10) 
     } 
    } 


    func createPaddle() 
    { 
     var paddle = Block(frame: CGRect(x: 140, y: 645, width: 150, height: 10)) 
     var drand11 = CGFloat(drand48()) 
     var drand12 = CGFloat(drand48()) 
     var drand13 = CGFloat(drand48()) 
     paddle.backgroundColor = UIColor(red: drand11, green: drand12, blue: drand13, alpha: 1) 
     view.addSubview(paddle) 
     allViewsArray.append(paddle) 
    } 


    func createBall() 
    { 
     var ball = Block(frame: CGRect(x: 197, y: 614, width: 30, height: 30)) 
     ball.layer.cornerRadius = 15 
     var drand21 = CGFloat(drand48()) 
     var drand22 = CGFloat(drand48()) 
     var drand23 = CGFloat(drand48()) 
     ball.backgroundColor = UIColor(red: drand21, green: drand22, blue: drand23, alpha: 1) 
     view.addSubview(ball) 
     allViewsArray.append(ball) 
      }   

    func giveDynamicProperties() 
    { 

     let dynamicItemBehavoir = UIDynamicItemBehavior(items: blockArray) 
     dynamicItemBehavoir.elasticity = 1.0 
     dynamicItemBehavoir.density = 100000 
     dynamicItemBehavoir.friction = 111111110 
     dynamicItemBehavoir.resistance = 1111110 
     dynamicItemBehavoir.allowsRotation = false 
     dynamicAnimator.addBehavior(dynamicItemBehavoir) 

     let dynamicItemBehavoir2 = UIDynamicItemBehavior(items: [paddle]) 
     dynamicItemBehavoir2.elasticity = 1.0 
     dynamicItemBehavoir2.density = 100000 
     dynamicItemBehavoir2.friction = 111111110 
     dynamicItemBehavoir2.resistance = 1111110 
     dynamicItemBehavoir2.charge = 3.0 
     dynamicItemBehavoir2.allowsRotation = false 
     dynamicAnimator.addBehavior(dynamicItemBehavoir2) 

     let dynamicItemBehavoir3 = UIDynamicItemBehavior(items: [ball]) 
     dynamicItemBehavoir3.elasticity = 1.0 
     dynamicItemBehavoir3.resistance = 0 
     dynamicItemBehavoir3.allowsRotation = false 
     dynamicAnimator.addBehavior(dynamicItemBehavoir3) 


     let pushBehavior = UIPushBehavior(items: [ball], mode: .Instantaneous) 
     pushBehavior.magnitude = 5 
     pushBehavior.pushDirection = CGVectorMake(-1.0 , 0.9) 
     dynamicAnimator.addBehavior(pushBehavior) 

     collisionBehavior.translatesReferenceBoundsIntoBoundary = true 
     collisionBehavior = UICollisionBehavior(items: allViewsArray) 
      collisionBehavior.collisionDelegate = self 
//  collisionBehavior.addBoundaryWithIdentifier("verticalMin", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(0, CGRectGetHeight(view.frame))) 
//  collisionBehavior.addBoundaryWithIdentifier("verticalMax", fromPoint: CGPointMake(CGRectGetMaxX(view.frame), 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetHeight(view.frame))) 
//  collisionBehavior.addBoundaryWithIdentifier("horizontalMin", fromPoint: CGPointMake(0, CGRectGetMaxY(view.frame)), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame))) 
//  collisionBehavior.addBoundaryWithIdentifier("horizontalMax", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), 0)) 
     collisionBehavior.collisionMode = UICollisionBehaviorMode.Everything 

     dynamicAnimator.addBehavior(collisionBehavior)  
    } 

    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 

    @IBAction func pan(sender: UIPanGestureRecognizer) 
    {    
     paddle.center = CGPointMake(sender.locationInView(view).x, paddle.center.y) 
     dynamicAnimator.updateItemUsingCurrentState(paddle) 

     //remove all beahavoris for dynamic animator 
     //remove from subview 
    } 

    func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item1: UIDynamicItem, withItem item2: UIDynamicItem) 
    { 

     for block in blockArray 
     { 
      if item1.isEqual(Block) && item2.isEqual(ball) 
      { 
       //     block dissappear 
       block.removeFromSuperview() 
       dynamicAnimator.updateItemUsingCurrentState(blockArray.removeAtIndex(0)) 
       //  collisionBehavior.removeItem(block) 
       --blockCount 
       print(blockCount) 
      }     
      dynamicAnimator.updateItemUsingCurrentState(block) 
     } 
    }  
} 

In der Ausgabe, die ich erhalten:

2016-04-12 10:25:48.321 Dynamic Animator[8732:289665] *** Assertion failure in -[UIDynamicAnimator _registerBodyForItem:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UIDynamicAnimator.m:872 
2016-04-12 10:25:48.343 Dynamic Animator[8732:289665] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid size {0, 0} for item <UIView: 0x7fdab1d34010; frame = (0 0; 0 0); layer = <CALayer: 0x7fdab1d34180>> in Dynamics' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000108f77e65 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010aedfdeb objc_exception_throw + 48 
    2 CoreFoundation      0x0000000108f77cca +[NSException raise:format:arguments:] + 106 
    3 Foundation       0x00000001095e84de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198 
    4 UIKit        0x000000010a3ffaca -[UIDynamicAnimator _registerBodyForItem:] + 784 
    5 UIKit        0x0000000109c968c0 -[UIDynamicItemBehavior _reevaluate:] + 306 
    6 UIKit        0x0000000109c969b1 -[UIDynamicItemBehavior _associate] + 66 
    7 UIKit        0x000000010a3fc700 -[UIDynamicAnimator _registerBehavior:] + 306 
    8 UIKit        0x000000010a3fc4bc -[UIDynamicAnimator addBehavior:] + 118 
    9 Dynamic Animator     0x00000001089e5ea3 _TFC16Dynamic_Animator22BreakOutViewController21giveDynamicPropertiesfS0_FT_T_ + 675 
    10 Dynamic Animator     0x00000001089e4aca _TFC16Dynamic_Animator22BreakOutViewController11viewDidLoadfS0_FT_T_ + 378 
    11 Dynamic Animator     0x00000001089e4b42 _TToFC16Dynamic_Animator22BreakOutViewController11viewDidLoadfS0_FT_T_ + 34 
    12 UIKit        0x0000000109b52f98 -[UIViewController loadViewIfRequired] + 1198 
    13 UIKit        0x0000000109b532e7 -[UIViewController view] + 27 
    14 UIKit        0x0000000109bb679c -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 502 
    15 UIKit        0x0000000109bb5710 -[UITabBarController transitionFromViewController:toViewController:] + 59 
    16 UIKit        0x0000000109bb1522 -[UITabBarController _setSelectedViewController:] + 377 
    17 UIKit        0x0000000109bb1398 -[UITabBarController setSelectedViewController:] + 234 
    18 UIKit        0x0000000109bb5581 -[UITabBarController _tabBarItemClicked:] + 481 
    19 UIKit        0x00000001099be194 -[UIApplication sendAction:to:from:forEvent:] + 92 
    20 UIKit        0x0000000109d8f6c4 -[UITabBar _sendAction:withEvent:] + 498 
    21 UIKit        0x00000001099be194 -[UIApplication sendAction:to:from:forEvent:] + 92 
    22 UIKit        0x0000000109b2d6fc -[UIControl sendAction:to:forEvent:] + 67 
    23 UIKit        0x0000000109b2d9c8 -[UIControl _sendActionsForEvents:withEvent:] + 311 
    24 UIKit        0x0000000109d9479c -[UITabBar(Static) _buttonUp:] + 103 
    25 UIKit        0x00000001099be194 -[UIApplication sendAction:to:from:forEvent:] + 92 
    26 UIKit        0x0000000109b2d6fc -[UIControl sendAction:to:forEvent:] + 67 
    27 UIKit        0x0000000109b2d9c8 -[UIControl _sendActionsForEvents:withEvent:] + 311 
    28 UIKit        0x0000000109b2caf8 -[UIControl touchesEnded:withEvent:] + 601 
    29 UIKit        0x0000000109a2d49b -[UIWindow _sendTouchesForEvent:] + 835 
    30 UIKit        0x0000000109a2e1d0 -[UIWindow sendEvent:] + 865 
    31 UIKit        0x00000001099dcb66 -[UIApplication sendEvent:] + 263 
    32 UIKit        0x00000001099b6d97 _UIApplicationHandleEventQueue + 6844 
    33 CoreFoundation      0x0000000108ea3a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    34 CoreFoundation      0x0000000108e9995c __CFRunLoopDoSources0 + 556 
    35 CoreFoundation      0x0000000108e98e13 __CFRunLoopRun + 867 
    36 CoreFoundation      0x0000000108e98828 CFRunLoopRunSpecific + 488 
    37 GraphicsServices     0x000000010e501ad2 GSEventRunModal + 161 
    38 UIKit        0x00000001099bc610 UIApplicationMain + 171 
    39 Dynamic Animator     0x00000001089ecefd main + 109 
    40 libdyld.dylib      0x000000010b9f192d start + 1 
    41 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

Egal, was ich versuche, halte ich diese bekommen. Wo ist das Problem? Ich bekomme einen sigabart Fehler, und ich habe alles versucht, um es zu beheben.

Antwort

0

Ich denke, was Sie fehlen hier, wenn Sie var ball = Block(frame: CGRect(x: 197, y: 614, width: 30, height: 30)) in Ihrer createBall() Funktion erstellen Sie eine neue Ansicht, die keine Beziehung zu Ihrer ball Eigenschaft hat.

Dann, wenn Sie Ihr Verhalten Ihre ball Eigenschaft hinzufügen, es bezieht sich auf die Eigenschaft, die Sie mit UIView() erstellt und hat einen Standardrahmen von CGRect.zero und Sie Ihre Exception.

In Ihrer createBall() Funktion sollten Sie ball = Block(frame: CGRect(x: 197, y: 614, width: 30, height: 30)) ohne die var tun, damit es Ihre vorhandene Eigenschaft zuweist, anstatt eine neue Ansicht zu erstellen. Das gleiche gilt für dein Paddel.

4

Es macht Sinn.

Der bedeutendste Teil der Fehlermeldung ist

App beenden aufgrund nicht abgefangene Ausnahme 'NSInternalInconsistencyException',

Grund: 'Ungültige Größe {0, 0} für Artikel < UIView: 0x7fdab1d34010; frame = (0 0; 0 0)

Sie haben die benannten Initialisierer von UIView

init(frame frame: CGRect) 

verwenden, um eine Größe, anstatt die Standard initializer Bereitstellung (die Klammern)