頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


iOS/macOSのscroll viewの簡単なサンプルコード

iOSでもmacOSでもscroll viewにはいつも悩まされる。
なのでシンプルなサンプルコードを作って確認してた。

YamaguchiTatsuya/ScrollView: This project has iOS/macOS scroll view’s sample using storyboard (and code).
↑そのプロジェクトをGitHubにアップした。

基本はstoryboardで完結させたいが、scroll viewに載せる内容をコードで記述した場合もあるのでどちらの場合に何をどこに紐付け(Auto Layoutのconstraintの設定)すればいいのか?他のstoryboardの設定は?などをコード内にメモしてる。
SwiftUIは一切使っていません。


macOS 10.15.4 Catalina
Xcode 11.4.1
Swift 5.2.2
スポンサーサイト






xibファイル内に置いたUILabelにアクセスできない

コード内からxibファイルを使おうとしてえらくはまったのでメモ。

やりたいのはxibファイルでUIViewオブジェクトにラベルやボタンを置いて、コードからこのUIViewオブジェクトを使いたいのである。
Storyboardのファイルからオブジェクト作成をしたことはあったが、xibファイルからはどうすればいいのか?と思い調べて、、、

XIBからViewを生成する4つの実装パターン - Qiita

↑このあたりを参考にした。

ところがボタンのタップは検出できるのだが、UILabelオブジェクトにつながらない。
this class is not key value coding-compliant for the key
なんてエラーメッセージが実行時に出る。

オブジェクトの生成の仕方がまずいのか?と色々試したりしたのだがよくわからず、、、
ようやくたどり着いたのがこちら↓
ios - Load XIB this class is not key value coding-compliant for the key - Stack Overflow

まさにこれ!
Viewに置いたUILabelの参照(referencing outlet)はFile’s OwnerではなくViewに接続する!!!
File’s Ownerに繋ぐものとばかり思ってたわ、、、



macOS 10.15.4 Catalina
Xcode 11.4.1
Swift 5.2.2


Unsafe***Pointer results in a dangling pointer という警告の回避方法

いつの間にやらXcodeが
Initialization of 'Unsafe***Pointer' results in a dangling pointer
という警告を出すようになってた。
どうもXcode 11.4で変わったそうだ。

Xcode 11.4 Release Notes | Apple Developer Documentation
↑確かに今後警告出す、とある。

let p = UnsafeRawPointer(hoge)
自分の場合、↑このようにしてポインタを得ているのだが、このpが次の行にはあるかどうかわかんねえぞ、というものらしい。とStack overflowにはある(※1)が、アプリは普通に動いてる。たまたまなんだろうか?

動いてはいるが気持ち悪いので警告が出ないようにしたかったが回避方法をいくら調べても見つからず、、、
結局UnsafeRawPointerを使わずに記述した。

元々は
func hoge(_ vertices: [vector_float3], …) {
let nofDots = vertices.count
let p = UnsafeRawPointer(vertices)
let data = Data(bytes: p , count: nofDots*MemoryLayout.size)
としていた。これをUnsafeRawPointerを使わずに、、、
    let data = Data(bytes: vertices , 
count: nofDots*MemoryLayout.size)
とした。ああ、これでいいのね、、、
元はObjective-Cのコードを移植したからポインタ使ってたけどSwiftだとこういう記述でいいみたい。

ちなみに上記のコードはGitHubにアップしてたこちらのもの↓

YamaguchiTatsuya/ApproximateCurveAndPlane: Sample code to calculate approximate curve and plane using Least squares method and Gauss-Jordan elimination in Swift, macOS

修正したのをpushした(つもり)。


※1)Stack Overflowより
swift - Warning: Initialization of 'UnsafeBufferPointer<T>' results in a dangling buffer pointer - Stack Overflow



macOS 10.15.4 Catalina
Xcode 11.4
Swift 5.2


  TopPage  



Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.