11198


お世話になります  
iOS7対応のswiftのコードで、uiviewに対して枠線をつけたいのですが、  
うまくいかず困っております

[code]

    self.layer.borderColor = UIColor.blackColor().CGColor
    self.layer.borderWidth = 1.0
    
[/code]

おそらく上記はiOS8でしか動かなようでして。。。  
quartzcoreを明示的にインポートしたらうまくいくかなって思いましたがダメでした。

以下エラーを吐きます

[code]

          2015-06-09 13:54:59.860 shotworks_for_ph2_by_swift[43366:607] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x7fc5e04d86c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key borderColor.'
      *** First throw call stack:
      (
        0   CoreFoundation                      0x000000010d435495 __exceptionPreprocess + 165
        1   libobjc.A.dylib                     0x000000010d19499e objc_exception_throw + 43
        2   CoreFoundation                      0x000000010d4b9919 -[NSException raise] + 9
        3   Foundation                          0x000000010cd75530 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
        4   UIKit                               0x000000010d716569 -[UIView(CALayerDelegate) setValue:forKey:] + 149
        5   CoreFoundation                      0x000000010d431400 -[NSArray makeObjectsPerformSelector:] + 224
        6   UIKit                               0x000000010d911893 -[UINib instantiateWithOwner:options:] + 1112
        7   UIKit                               0x000000010d78044b -[UITableView _dequeueReusableViewOfType:withIdentifier:] + 302
        8   UIKit                               0x000000010d7806b6 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 44
        9   shotworks_for_ph2_by_swift          0x000000010b02bc3b _TFC26shotworks_for_ph2_by_swift13EasySearchVCL9tableViewfS0_FTCSo11UITableView21cellForRowAtIndexPathCSo11NSIndexPath_CSo15UITableViewCell + 1163
        10  shotworks_for_ph2_by_swift          0x000000010b02bd2f _TToFC26shotworks_for_ph2_by_swift13EasySearchVCL9tableViewfS0_FTCSo11UITableView21cellForRowAtIndexPathCSo11NSIndexPath_CSo15UITableViewCell + 79
        11  UIKit                               0x000000010d78af8a -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] + 348
        12  UIKit                               0x000000010d770d5b -[UITableView _updateVisibleCellsNow:] + 2337
        13  UIKit                               0x000000010d782721 -[UITableView layoutSubviews] + 207
        14  UIKit                               0x000000010d716993 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 354
        15  QuartzCore                          0x000000010c7dd802 -[CALayer layoutSublayers] + 151
        16  QuartzCore                          0x000000010c7d2369 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 363
        17  UIKit                               0x000000010d70af70 -[UIView(Hierarchy) layoutBelowIfNeeded] + 521
        18  UIKit                               0x000000010d7cd7d6 -[UINavigationController _layoutViewController:] + 1077
        19  UIKit                               0x000000010d7cb0b4 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 395
        20  UIKit                               0x000000010d6fb68e -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 235
        21  UIKit                               0x000000010d6fa184 +[UIViewAnimationState popAnimationState] + 281
        22  UIKit                               0x000000010d991f7a -[UINavigationTransitionView transition:fromView:toView:] + 2504
        23  UIKit                               0x000000010d9915b0 -[UINavigationTransitionView transition:toView:] + 25
        24  UIKit                               0x000000010d7ce4d7 -[UINavigationController _startTransition:fromViewController:toViewController:] + 2893
        25  UIKit                               0x000000010d7ce787 -[UINavigationController _startDeferredTransitionIfNeeded:] + 547
        26  UIKit                               0x000000010d7cf238 -[UINavigationController __viewWillLayoutSubviews] + 43
        27  UIKit                               0x000000010d8e9895 -[UILayoutContainerView layoutSubviews] + 202
        28  UIKit                               0x000000010d716993 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 354
        29  QuartzCore                          0x000000010c7dd802 -[CALayer layoutSublayers] + 151
        30  QuartzCore                          0x000000010c7d2369 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 363
        31  QuartzCore                          0x000000010c7dd736 -[CALayer layoutIfNeeded] + 162
        32  UIKit                               0x000000010d7bca22 -[UIViewController window:setupWithInterfaceOrientation:] + 264
        33  UIKit                               0x000000010d6f3cad -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 4360
        34  UIKit                               0x000000010d6f2b9f -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 36
        35  UIKit                               0x000000010d6f2aef -[UIWindow _setRotatableViewOrientation:updateStatusBar:duration:force:] + 101
        36  UIKit                               0x000000010d6f1dfe -[UIWindow _updateToInterfaceOrientation:duration:force:] + 377
        37  UIKit                               0x000000010d7b070a -[UIViewController _tryBecomeRootViewControllerInWindow:] + 147
        38  UIKit                               0x000000010d6ecb1b -[UIWindow addRootViewControllerViewIfPossible] + 490
        39  UIKit                               0x000000010d6ecc70 -[UIWindow _setHidden:forced:] + 282
        40  UIKit                               0x000000010d6f5ffa -[UIWindow makeKeyAndVisible] + 51
        41  UIKit                               0x000000010d6b1c98 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1788
        42  UIKit                               0x000000010d6b5a0c -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 660
        43  UIKit                               0x000000010d6c6d4c -[UIApplication handleEvent:withNewEvent:] + 3189
        44  UIKit                               0x000000010d6c7216 -[UIApplication sendEvent:] + 79
        45  UIKit                               0x000000010d6b7086 _UIApplicationHandleEvent + 578
        46  GraphicsServices                    0x000000010f56c71a _PurpleEventCallback + 762
        47  GraphicsServices                    0x000000010f56c1e1 PurpleEventCallback + 35
        48  CoreFoundation                      0x000000010d3b7679 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
        49  CoreFoundation                      0x000000010d3b744e __CFRunLoopDoSource1 + 478
        50  CoreFoundation                      0x000000010d3e0903 __CFRunLoopRun + 1939
        51  CoreFoundation                      0x000000010d3dfd83 CFRunLoopRunSpecific + 467
        52  UIKit                               0x000000010d6b52e1 -[UIApplication _run] + 609
        53  UIKit                               0x000000010d6b6e33 UIApplicationMain + 1010
        54  shotworks_for_ph2_by_swift          0x000000010b065ea7 main + 135
        55  libdyld.dylib                       0x000000010edd75c9 start + 1
      )
      libc++abi.dylib: terminating with uncaught exception of type NSException
      (lldb) bt
      * thread #1: tid = 0x19618a, 0x000000010ef04286 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
          frame #0: 0x000000010ef04286 libsystem_kernel.dylib`__pthread_kill + 10
          frame #1: 0x000000010eed142f libsystem_pthread.dylib`pthread_kill + 90
          frame #2: 0x000000010ec32e59 libsystem_sim_c.dylib`abort + 101
          frame #3: 0x000000010ea88bf3 libc++abi.dylib`abort_message + 195
          frame #4: 0x000000010eaae51e libc++abi.dylib`default_terminate_handler() + 264
          frame #5: 0x000000010d194bfe libobjc.A.dylib`_objc_terminate() + 103
          frame #6: 0x000000010eaabe91 libc++abi.dylib`std::__terminate(void (*)()) + 8
          frame #7: 0x000000010eaabb3d libc++abi.dylib`__cxa_rethrow + 109
          frame #8: 0x000000010d194b11 libobjc.A.dylib`objc_exception_rethrow + 40
          frame #9: 0x000000010d3dfe34 CoreFoundation`CFRunLoopRunSpecific + 644
          frame #10: 0x000000010d6b52e1 UIKit`-[UIApplication _run] + 609
          frame #11: 0x000000010d6b6e33 UIKit`UIApplicationMain + 1010
        * frame #12: 0x000000010b065ea7 shotworks_for_ph2_by_swift`main + 135 at AppDelegate.swift:15
          frame #13: 0x000000010edd75c9 libdyld.dylib`start + 1
          frame #14: 0x000000010edd75c9 libdyld.dylib`start + 1
      (lldb)
    
[/code]

どなたかお分かりになる方いらっしゃいますでしょうか

よろしくお願いします。


CC BY-SA 3.0
2015-06-08T16:39:28.117
11133
2015-06-10T05:24:57.467
2015-06-09T22:03:02.570
403
403
question
ios swift uikit quartz
ios7対応のswiftコードでuiviewに枠線をつけたい


エラーメッセージをちゃんと読むと、「UIViewクラスにはborderColorというキーがない」と書かれています(CALayerのborderColorを設定しようとしてエラーになったのではなく、UIViewのborderColorというキーを設定しようとして、それがなくてエラーになっています)。質問に書いたコードは`self.layer.borderColor`に対して設定していますが、もしかして、それとは別に対象Viewの設定でIdentity
inspectorのUser Defined Runtime
Attributesに、borderColorという誤ったキーを設定したゴミが残っていたりしませんか?(UIViewにborderColorというプロパティはありません。)

User Defined Runtime
Attributesに不正キーが設定されていた場合、iOS8は警告ログが出力されて実行継続しますが、iOS7は例外で停止します。  
質問に書かれたコード自体はiOS8でもiOS7でもちゃんと動作するはずです。

User Defined Runtime Attributesにゴミが残っているだけなら、それを削除するのが正しい対処だと思います。

(6/10 14:15編集)  
自己回答は削除されたようなので、それに対するコメント部分は削除しました。また、CALayerのborderColorでなくUIViewのborderColorに対するアクセスでエラーになっていることを明確化し、他の人が見ても指摘ポイントが分かりやすいようにしました。


CC BY-SA 3.0
2015-06-10T00:00:25.740
11198
2015-06-10T05:24:57.467
2015-06-10T05:24:57.467
9367
9367
11133
answer