<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>IOS on nnasaki のブログ</title>
    <link>https://blog.nnasaki.com/categories/ios/</link>
    <description>Recent content in IOS on nnasaki のブログ</description>
    <image>
      <title>nnasaki のブログ</title>
      <url>https://blog.nnasaki.com/ogp.png</url>
      <link>https://blog.nnasaki.com/ogp.png</link>
    </image>
    <generator>Hugo</generator>
    <language>ja-JP</language>
    <lastBuildDate>Mon, 16 Jun 2014 23:25:34 +0900</lastBuildDate>
    <atom:link href="https://blog.nnasaki.com/categories/ios/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Objective-Cからswiftに書き直すときの対処まとめ</title>
      <link>https://blog.nnasaki.com/entry/2014/06/16/232534/</link>
      <pubDate>Mon, 16 Jun 2014 23:25:34 +0900</pubDate>
      <guid>https://blog.nnasaki.com/entry/2014/06/16/232534/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/Azure/azure-mobile-services/tree/master/quickstart/iOS/ZUMOAPPNAME&#34;&gt;Microsoft Azure Mobile Servicesのサンプルアプリ&lt;/a&gt;を&lt;a href=&#34;http://d.hatena.ne.jp/keyword/swift&#34;&gt;swift&lt;/a&gt;で書き直して、&lt;a href=&#34;https://github.com/Azure/azure-mobile-services/pull/279&#34;&gt;Pull Request を行いました&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;残念ながらこの Pull Request は取り込まれなかった（私が行った二日後ぐらいに、&lt;a href=&#34;https://github.com/Azure/azure-mobile-services/pull/284&#34;&gt;別のPull Request&lt;/a&gt;で同等の機能を中の人が実装したから。「ちょっ、おまｗｗｗｗｗ」っていう感じだけど。)のですが、そのときにいろいろとノウハウが貯まったので対処をまとめました。&lt;/p&gt;
&lt;h2 id=&#34;dyld-library-not-loaded-rpathlibswift_stdlib_coredylib-というエラーメッセージが出てアプリが起動しない&#34;&gt;&lt;code&gt;dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib&lt;/code&gt; というエラーメッセージが出てアプリが起動しない&lt;/h2&gt;
&lt;p&gt;手始めに&lt;code&gt;main.m&lt;/code&gt;を削除してと&lt;code&gt;QSAppDelegate.swift&lt;/code&gt;に置き換えたらこれが出てハマりました。
&lt;a href=&#34;http://d.hatena.ne.jp/keyword/Xcode&#34;&gt;Xcode&lt;/a&gt;を再起動したら直りました。&lt;/p&gt;
&lt;h2 id=&#34;anyobject-does-not-have-a-member-named-mutablecopy&#34;&gt;&amp;lsquo;AnyObject[]&amp;rsquo; does not have a member named &amp;lsquo;mutableCopy&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;NSArrayをmutableCopyしてNSMutableArrayに入れようとしたらエラー。キャストではなく、NSMutableArrayの&lt;a href=&#34;http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%B9%A5%C8%A5%E9%A5%AF%A5%BF&#34;&gt;コンストラクタ&lt;/a&gt;で返すようにしたらうまくいったっぽい。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 修正前
var items = results.mutableCopy() as NSMutableArray

// 修正後
var items = NSMutableArray(array:results)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ambiguous-use-of-nsnotfound&#34;&gt;Ambiguous use of &amp;lsquo;NSNotFound&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://d.hatena.ne.jp/keyword/iPhone5s&#34;&gt;iPhone5s&lt;/a&gt;でビルドしていたときは良かったけど、&lt;a href=&#34;http://d.hatena.ne.jp/keyword/iPhone5&#34;&gt;iPhone5&lt;/a&gt;や&lt;a href=&#34;http://d.hatena.ne.jp/keyword/iPhone4s&#34;&gt;iPhone4s&lt;/a&gt;でビルドしたらなぜか上記エラーでビルドが通らなくなった。多分、#ifでプラットフォームごとに読み込むヘッダーを変えているからだと思われる。&lt;code&gt;Foundation.NSNotFound&lt;/code&gt;とすることで解消した。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 修正前
if (index != NSNotFound) { //... }

// 修正後
if (index != Foundation.NSNotFound) { //... }
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ブロックのメソッド定義と呼び出し方&#34;&gt;ブロックの&lt;a href=&#34;http://d.hatena.ne.jp/keyword/%A5%E1%A5%BD%A5%C3%A5%C9&#34;&gt;メソッド&lt;/a&gt;定義と呼び出し方&lt;/h2&gt;
&lt;p&gt;これは慣れるとそうでもないんだけど、慣れるまでわけわからなかった。&lt;/p&gt;
&lt;h3 id=&#34;空のブロックの場合&#34;&gt;空のブロックの場合&lt;/h3&gt;
&lt;p&gt;空の場合はそんなに違いないですかね。&lt;/p&gt;
&lt;h4 id=&#34;objective-c&#34;&gt;&lt;a href=&#34;http://d.hatena.ne.jp/keyword/objective-c&#34;&gt;objective-c&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 定義
typedef void (^QSCompletionBlock) ();
- (void)refreshDataOnSuccess:(QSCompletionBlock)completion;

// 呼び出し方
[self.todoService refreshDataOnSuccess:^
{
    if (self.useRefreshControl == YES) {
        [self.refreshControl endRefreshing];
    }
    [self.tableView reloadData];
}];
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;swift&#34;&gt;&lt;a href=&#34;http://d.hatena.ne.jp/keyword/swift&#34;&gt;swift&lt;/a&gt;&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 定義
func refreshDataOnSuccess(completion:()-&amp;gt;Void)

// 呼び出し方
todoService.refreshDataOnSuccess({() in
    if (self.useRefreshControl == true) {
        self.refreshControl.endRefreshing()
    }
    self.tableView.reloadData()
})
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;引数が一つあるブロックの場合&#34;&gt;引数が一つあるブロックの場合&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://d.hatena.ne.jp/keyword/swift&#34;&gt;swift&lt;/a&gt;でのポイントは呼び出し時のブロックに型を指定しないことですかね。
&lt;a href=&#34;http://d.hatena.ne.jp/keyword/swift&#34;&gt;swift&lt;/a&gt; での NSUInteger は UInt ではなく、Int で良いみたいです。UInt も用意されているようだけど。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
