2014年7月11日金曜日

SwiftコードだけでUITableViewを配置

Storyboardを使わずに、Swiftコードだけで
UIViewController に UITableView を配置する例

( UITableView を配置する母体となる UIViewController は
Storyboard上に存在している前提です )


import UIKit

class HogeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var tableView : UITableView = UITableView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        tableView.frame = CGRectMake(0, 45, self.view.bounds.size.width, 1000)
        self.view.addSubview(tableView)
        
        tableView.delegate = self
        tableView.dataSource = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // セルの数
    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int  {
        return 1
    }
    
    // セルの設定
    func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell! {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
        cell.textLabel.text = "セル \(indexPath.row)番目"
        cell.detailTextLabel.text = "詳細"
        return cell;
    }
    
    // セルが選択されたときに呼ばれる
    func tableView(tableView: UITableView?, didSelectRowAtIndexPath indexPath:NSIndexPath!) {
        println("選択された \(indexPath.row)番目")
    }

}

動作確認環境
Xcode6beta3

2014年7月10日木曜日

Swfitでアプリ内共通変数 ( グローバル変数? )



AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
                            
    var window: UIWindow?
        
    var userId:Int = 0     //  <==== この変数を他のクラスからアクセスする

    func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
        // Override point for customization after application launch.



ViewController.swift (他のクラス)

class ViewController: UIViewController {
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        // AppDelegateクラスのメンバー変数を参照する
        var app:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
        println(app.userId)

    }


動作環境
Xcode6beta3

2014年3月27日木曜日

MAMP 3.0.3 でバーチャルホスト設定

以前のバージョンの設定方法をぐぐって
/Applications/MAMP/conf/apache/httpd.conf
/Applications/MAMP/conf/apache/extra/httpd-vhost.conf
/etc/hosts
を、変更したが目的のドキュメントルートを読みに行ってくれなくて、しばらくハマってたけど....

MAMP 3.0.3 では
アプリの画面からバーチャルホストを設定できるようだ
なんだ簡単なことだった


/etc/hosts への登録も自動でやってくれる
便利だなー

ちなみに、MAMP (無料版)と、MAMP PRO (有料) は一本化されて
スタンドアローンで使うなら試用期限すぎてもOKっぽい

アプリケーションフォルダに無料版と有料版(PRO)の両方があった

2013年10月15日火曜日

iPhone 連絡先 エクスポート アプリ

iPhone を、MNPで買い換えた。
連絡先をどうやって移行するか迷ったが
アプリで解決した。

連絡先 バックアップ - IS Contacts Kit Free

iCloudで同期すればよさそうだけど
私の場合は、連絡先がGmail アカウントに紐付いてるようで
なんかイマイチよくわからない状況に。

GmailアカウントをPCで開いてみても、iPhoneの連絡先がすべて同期されているわけでもなく
iPhone上で、Gmailアカウントと連絡先が関連付けられている設定をOFFにしようとすると
連絡先が削除される的なメッセージが出るため試すに試せず。

連絡先から、転送しようにも
MNP後だから、メールや、SMSから送信できず?

結局、上記アプリで、
エクスポートして
DROP BOX でアップロードした。

ファイルのフォーマットは一応
CSV, Excel, vCard の3種類でエクスポートしておいた。



あとは必要な連絡先のみ
新しいiPhoneで設定する予定。

2013年10月10日木曜日

vimrcで set enc=sjis を自動化

数年前からlinuxサーバーは基本的にUTF-8環境で構築して運用している
でも、たまに顧客環境のソースがSJISとかEUCもある

わたしはテキストエディタにvimを使っていて
linuxサーバーにsshログインしてvimでソース編集するのが一番使いやすい。

eucや、sjisを編集する場合は
PCでGUIのエディタ等を使ったりもするが
何よりGUIでいろいろ操作するのが煩わしいし
頻繁にマウスに持ち替えるの煩わしい。
やっぱり使い慣れたvimがいい。

そんなときは端末エミュレータでSJISの設定。
( OSX の ターミナル.app を使っている )

linuxにログイン

$ env
~
LANG=ja_JP.SJIS
~

vim でファイルを開いたあと

:set enc=sjis


で、SJIS編集モードにするか

vimで開くときに

vim -c 'set enc=sjis' hoge.php

とする

これが頻繁にやると結構面倒

sjisオンリーなら.vimrcに設定しておけばいいのだが
utf-8, sjis, euc-jp のソースが混在してるシステムだったりすると
なかなか面倒だ。

ちなみに、euc-jp は set enc= を設定しなくても
文字化けせずvimで開ける

linuxが標準でsjisに対応していないせいか
sjisのコード体系に制御コード?asciiコードを含むために
自動判別しづらいせいなのか
とにかく、sjisは自動判別できてない。

そこで、環境変数LANG で、SJIS環境なら
vim で開くときに set enc=sjis するようにvimrcに設定

$ vim ~/.vimrc
これを追加
if $LANG == 'ja_JP.SJIS'
    set enc=sjis
endif

2013年10月6日日曜日

iPhoneを探す・iOS7・アクティベーションロック・Apple ID変更

以前、Apple ID を変更した。
新たにApple IDを取得したのではなく
Apple IDのメールアドレスを変更した。(Macで)

aaa@example.com
↓ Apple IDのメールアドレス変更
bbb@example.com

iPhoneのiCloud のアカウントは
旧アカウントのままで自動で変更されることはなかった。
でも、なんとなくそのままiCloudは放置してた。
フォトストリームとか使いたかったけど
家族とアカウントを共有してから
何を共有して何を共有しないのか整理できなくて
なんとなく放置してた。

家族とアカウントを共有したのは
有料アプリやiTunesで曲を購入したのを共有したかっかから。

Apple IDの家族との共有は今度別の記事で書いてみようと思う。

本題に戻って、Apple IDのメールアドレスは変更したけど
iPhoneのiCloudのアカウントは変更せず放置したまま
iOS7にアップデートした。
その後、フォトストリームの設定を試したくなったので
iCloudのアカウントを変更しようとしたが..
iPhoneのiCloudアカウントに設定しているのは
Apple IDの旧メールアドレス。
パスワードを聞かれるので
昔つかってたであろう、パスワードや
アカウント変更後のパスワードを試したが
どれもパスワードが違うと言われる。

パスワードをリセットしたがメールが届かない。
秘密の質問にも答えたけど違うと言われる。
おそらく旧メールアドレスは、もうApple IDに紐付いてないので
メールもこないし秘密の質問の答えも保持できてないし
ログインできないのだろうと解釈して
iPhone のiCloud 設定の一番下の
「アカウントを削除」
しようとしたが
「iPhoneを探す」がオンになっているので
iOS7からの新機能?の、アクティベーションロックの影響で
削除できない。
そのアカウントで正しいパスワードを入力してログインしないと
削除できない。
つまり盗難後の再利用防止的な措置だ。

困った。
Apple IDのアカウント変更(メールアドレス変更)により
もう存在していないアカウント状態になっているけど
削除できない。
このまま使おうにも、ときどき、iCloudアカウントのパスワードを要求されて面倒。
なにより、子供に渡す前に初期化してまっさらにして渡したい。

同じような状況で困ってる人もいるようだ。

PCから、iCloud.com にログインして
iPhoneを探す、デバイスから、問題のiPhoneを削除してみたが
iPhone側の状態は変わらない。
もしかして時間差で「iPhoneを探す」がオフになるのかもとおもったが
1時間ぐらいしてもダメだった。
新メールアドレスと旧メールアドレスが紐付いてなかったら
新メールアドレスでログインしたiCloud上で
iPhoneを探すデバイスからiPhoneを削除しても
反映されないのではないか...
待っても無駄かも

更に試行錯誤の末
iPhoneのiCloudアカウント(旧アカウント)を削除するために
新たに旧アカウントと同じメールアドレスでApple ID を新規登録してみた。
登録できた。

旧アカウントと同じメールアドレスの新規アカウント... ややこしいな。
Apple IDのメールアドレスをダミーで一旦整理。

aaa@example.com(旧アカウント、iPhoneのiCloudアカウント)

↓メールアドレス変更

bbb@example.com(新アカウント)

aaa@example.com(新規アカウント、再取得)

iPhoneのiCloud設定でアカウントは今取得した新アカウントと同じ状態なので
新たに設定したパスワードを入力してみた。
パスワード認証はできたようだが
作成したばかりのApple IDは、iCloudアカウントにはなってなかった。
iOSデバイスか、OSXデバイスで、iCloudとして登録する必要があるようだ。

メインのiMacは、なんか仮アカウントで汚したくなかったので
しばらく眠ってた、macbook air 11インチを出してきて
システム設定のiCloudで、新規アカウントを登録した。

そして、再度、iPhoneのiCloudアカウントでログイン...できた!!!!
iPhoneを探すをオフにできた!!!
宙ぶらりんだったアカウント( aaa@example.com )
iPhoneのiCloudアカウントを削除できた。

これで、無事に
以前メールアドレス変更した
bbb@example.com を
iPhoneのiCloudアカウントに設定できた。

めでたし。めでたし。

現在メインのApple IDである、bbb@example.com
の変更前である アカウント aaa@example.com
がゴミとして残るのが少しだけ気持ちわるいがしょうがない。
Apple ID を削除する手段はないようだ。
放置でいいや。

このやり方が正しいかどうか不明だし
もしかしたら後から何か不都合があるのかもしれないので
試す方は自己責任で。

( この記事を書いた所要時間 34 min )

2013年9月19日木曜日

Mac OSX プレビューで画像のGPS情報を確認

最近、iPhoneとかGPS機能を持つカメラで写真を撮ると
撮影地のGPS情報が写真に付加される

ブログとかで画像をアップするときには要注意

Mac OSX のプレビュー.app で簡単にGPS情報の有無を確認する方法

メニューの「ツール」から「インスペクタを表示」




左から2個目の黒丸に i のタブをクリック

GPS情報がある画像の場合

GPSタグが表示され
緯度経度、地図などが表示されます


リンクを踏んでWebブラウザでGoogleマップも見れます



GPS情報がない画像

GPSタブ自体が表示されません

これで一安心