2012년 9월 10일 월요일

SVN(SubVersion)リビジョン比較コマンドとリビジョン戻す方法


比較するリビジョン番号が1234と2345の場合以下のURLになります。
svn diff -r 1234: 1234 http://SVN_Address/プロジェクトURL

・リビジョン1234を123を戻す方法は以下となります。
  svn merge -r 1234:1233 http://svn.example.com/repos/agt/trunk
・コミット処理
  svn commit -m "Undoing change committed in r1234."

・1つのファイルのみ戻したい場合は以下となります。
  svn merge -r 7:6 test.m 
・コミット処理
  svn commit -m 'reverted to 6' test.m

2012년 8월 27일 월요일

IOSデータ保護方法

※iOS 4 以降、データ保護機能が提供されるようになりました。
データ保護機能を有効にするにはパスコードロックを有効にする必要がある



【NSFileManager】
NSDictionary* attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
NSError* error = nil;
[fileManager setAttributes:attributes ofItemAtPath:filePath error:&error];


【NSData】
NSError* error = nil;
NSData* data = [NSData dataWithContentsOfFile:src1];
[data writeToFile:filePath options:NSDataWritingFileProtectionComplete error:&error];

2012년 8월 21일 화요일

CoreData データモデル属性













Attribute


【オプション/Option】
オプションにチェックをした場合、Entityは、そのAttributeが値を持たない場合でも保存可能である。逆に、オプションではないAttributeに値がセットされていない状態でEntityを保存しようとするとエラーが返される。
そのAttributeが必須項目であれば、オプションからチェックをはずし、そうでなければチェックしておけばよい。

【一時/Transient】
一時的なAttributeは、生成はされるが、ディスク上(Persistent store)には保存されない。
臨時保存先となります。

【索引付き/Indexed】
索引付きにチェックをした場合、このAttributeはデータ保存時にインデックスを作成する。
このインデックスは、データベース内の検索を高速化するために用いられる。
該当Attributeを用いて検索やソートを行う場合、索引付きにしておくことでかなりの高速化効果が期待できる。しかしながら、検索やソートに用いないのであれば、逆効果を招きかねないのでチェックすべきではない。DBに保存時インデックス作成しているので保存時間がかかります。

【Attribute Type】
- Integer 16:-32,768 to 32, 767
- Integer 32:-2,147,483,648 to 2,147,483,647
- Integer 64:-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

2012년 8월 20일 월요일

モダルビューアからキーボードを非表示にする方法


- (IBAction)close:(id)sender {
    [textField resignFirstResponder];
    @try
    {
        Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
        id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
        [activeInstance performSelector:@selector(dismissKeyboard)];
    }
    @catch (NSException *exception)
    {
        NSLog(@"%@", exception);
    }
}

2012년 8월 15일 수요일

Xcode 4におけるiOS Frameworkの作成方法(URL参照)

http://mobileapplication.blog.fc2.com/blog-entry-8.html
http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

UITextView コピー禁止する方法


@implementation UITextView(Private)
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
[UIMenuController sharedMenuController].menuVisible = NO; //do not display the menu
[self resignFirstResponder]; //do not allow the user to selected anything
return NO;
}
@end
上記カテゴリを追加する

IOS デバイス使用可能容量取得


デバイスのルートディレクトリには、/etcと/varというフォルダがあるようです。
基本的なアプリは/varに入ります。/etcはおそらくシステムフォルダでしょう。

【例】
NSDictionary *dict = [[NSFileManager defaultManager] fileSystemAttributesAtPath:@"/var" ];

NSNumber *free = [dict valueForKey:NSFileSystemFreeSize];<br />NSNumber *system = [dict valueForKey:"NSFileSystemSize"];
NSLog("free:%.3f",[free floatValue]/1024/1024/1024);<br />NSLog("sys:%.3f",[system floatValue]/1024/1024/1024);

IOS イメージサイス整理


Application icon (in pixels)
iPad:72x72
iPad Retina:144x144
iPhone:57x57
iPhone Retina:114x114

Launch image (in pixels)
iPad:768 x 1004 (portrait) 1024 x 748 (landscape)
iPad Retina:1536 x 2008 (portrait) 2048 x 1496 (landscape)
iPhone:320 x 480
iPhone Retina:640 x 960

Tab bar icon (in pixels)
iPad:Approximately 30 x 30
iPad Retina:Approximately 60 x 60
iPhone:Approximately 30 x 30
iPhone Retina:Approximately 60 x 60

Toolbar and navigation bar icon (in pixels)
iPad:Approximately 20 x 20
iPad Retina:Approximately 40 x 40
iPhone:Approximately 20 x 20
iPhone Retina:Approximately 40 x 40

IOS5.0.1からDocumentフォルダがiTunesとiCloudバックアップ対象外設定できる


IOS5.0.1以後、Documentフォルダのファイルをバックアップ(iTunesとiCloud)対象外にするとこができるようになりました。
以下のURLを参考してください。
http://developer.apple.com/library/ios/#qa/qa1719/_index.html#//apple_ref/doc/uid/DTS40011342

IOS5以後、Cachesフォルダシステムが削除する


IOS5以後、Library/Cacheフォルダのファイルを使用可能容量が
100MB~0MB(想定)の場合システムが自動に削除するようになりました。
以下のURLを参考してください。
https://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html%23//apple_ref/doc/uid/TP40010672-CH2-SW2

2012년 7월 23일 월요일

ファイル毎に ARC の有効・無効を設定する


IOS5以上から実行できる機能で、IOS4ではエラーが発生する。


ARC (Automatic Reference Counting) を有効にすると、従来のソースコードを大幅に修正する必要がでてくるため、それまでに作成していたプログラムをまるごと ARC に移行するのは、なかなか困難な場合もあると思います。
この ARC を使うかどうかの設定ですが、ARC を有効にする で記したプロジェクト単位での設定の他にも、ファイル単位でも設定できるようになっていました。

ファイル単位で ARC の有効化または無効化は、プロジェクトの "TARGET" の設定で行います。
プロジェクトの "TARGET" を選択したら、そこの "Build Phases" から "Compile Sources" を選択します。


ここで、ARC の有効化や無効化を個別に設定したいソースファイルをダブルクリックして、コンパイラーオプションとして、次の値を設定します。
// ARC を有効化したい場合
-fobjc-arc

// ARC を無効化したい場合
-fno-objc-arc
このようにすることで、"-fobjc-arc" オプションを付けたソースコードは ARC を有効化した状態で、"-fno-objc-arc" オプションを付けたソースコードは ARC を無効化した状態で、コンパイルされるようになります。

□ ARC コードを ARC ではない環境で間違ってコンパイルしないために

非 ARC のソースコードを ARC 環境でコンパイルした場合には、多くの場合 retain や release のコードがエラーになるので間違うことはないでしょうけど、逆の場合はエラーにならないため注意が必要です。
特に上記のような、ソースファイル単位で ARC の有無を調整している場合には、あるプロジェクトでは ARC を有効化したものの、別のプロジェクトでは有効化し忘れたまま気づかないなどということもあるかもしれません。

ARC を想定して作成したコードを ARC を有効にせずにコンパイルしてしまわないように、ARC が無効の場合にはコンパイルエラーになるようにするのがいいかもしれません。
次のコードをソースコードのどこかたとえば上の方に記載しておくことで、ARC 非対応時にコンパイルエラーとすることができます。
#if !__has_feature(objc_arc)
#error This code needs compiler option -fobjc_arc
#endif
ARC が有効かどうかが大切なのはコンパイルの時なので、このコードはソースコード (".m" や ".mm") のどこかに入れるようにします。
たとえば静的ライブラリなどで、ヘッダーファイルの方に上記のコードを入れてしまっていると、たとえば組み込み先のプロジェクトの ARC が無効なために、静的ライブラリでは正しくコンパイルされているにもかかわらず、使用時にエラーと扱われてしまったりします。
また、Xcode 4.2.1 の場合、コンパイルには成功しても、その後のソースエディタで #error のところが常にエラーとして表示されてしまう場合がありました。その場合はいったんプロジェクトを閉じて開き直せば、コンパイルオプションに合わせてちゃんとエラーが通知されるようになりました。

リンク先→http://program.station.ez-net.jp/special/objective-c/llvm/arc/enable-file.asp

IOS Loding 表示関連

출처 - http://d.hatena.ne.jp/murapong/20120522/1337696404

2012년 7월 20일 금요일

iPad ModalView表示の時、キーボードが隠れない


@try
{
    Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
    id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
    [activeInstance performSelector:@selector(dismissKeyboard)];
}
@catch (NSException *exception)
{
    NSLog(@"%@", exception);
}

2012년 3월 15일 목요일

CoreDataのFrom句Select句


CoreDataのFrom句Select句Add Star


CoreDataのSelectカラム指定方法。
NSFetchRequest *fetchRequest = NSFetchRequest alloc] init];
NSEntityDescription *entitydesc = [coreDataManager entityDescription:@"TableName"]; //from句(テーブル指定)

//ここからカラム指定
NSMutableArray *properties = [NSMutableArray arrayWithObject:[entityProperties objectForKey:@"カラム名";
[properties addObject:[entityProperties objectForKey:@"カラム名"; //2つ目のカラム名
[fetchRequest setPropertiesToFetch:properties]; //セットした2カラムを抽出するようにセットする

ちなみにNSFetchedResultsControllerを使うとUITableViewの表示がとても楽になる

データ及びオブジェクトをファイル保存方法


iOS でプロパティリストを使ったデータの保存方法Add Star

iOS でオブジェクトをシリアライズする方法に続き今回もデータ永続化方法の紹介です。
iOS にはプロパティリストと呼ばれるファイル形式があります。プロパティリストは NSArray や NSDictionary クラスを使って簡単にデータの読み書きができます。
ここではプロパティリストを使った基本的なデータの保存方法から自作クラスのオブジェクトを保存する方法まで説明します。

プロパティリストって何?

プロパティリストは Mac OS X や iOS で利用することができるデータ永続化のためのファイル形式です。Mac OS X ではもっぱらユーザの情報を設定するのに使われる事が多く Windows のレジストリのような使われ方をしています。iOS では Info.plist のようにアプリの情報を設定するのに使われることが多いです。
またプロパティリストはファイルの拡張子が .plist になってるため plist ファイルと呼ばれることもあります。
プロパティリストは汎用性が高くデータの読み書きもプログラムから簡単にできるので、アプリの設定以外にもプログラム上でデータを保存するのに使用されます。
プロパティリスト形式のデータは Property List Editor という専用のエディタで手軽にデータの編集ができるのも特徴です。人間の目で見てわかるデータの管理に向いています。
Property List Editor
プロパティリスト全体は NSArray または NSDictionary 型で保存する必要があります(おおもとのデータの型が NSArray か NSDictionary でなければならないという意味です)。NSArray や NSDictionary のデータにさらに NSArray または NSDictionary のデータをネストすることもできます。

プロパティリスト形式でデータを保存する

それではプロパティリストを使ったデータの保存方法を見ていきましょう。
プロパティリストにデータを保存するには NSArray と NSDictionary クラスの writeToFileメソッドを使います。
以下は NSArray クラスの writeToFileメソッドを使ったデータ保存の例です。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *filePath = [directory stringByAppendingPathComponent:@"data.plist"];
    
NSArray *array = [NSArray arrayWithObjects:@"山田太郎", @"東京都中央区", nil];
BOOL successful = [array writeToFile:filePath atomically:NO];
if (successful) {
  NSLog(@"%@", @"データの保存に成功しました。");
}
保存されたデータは XML 形式で保存されています。実際のデータを見ると以下のようになっています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
  <string>山田太郎</string>
  <string>東京都中央区</string>
</array>
</plist>

プロパティリスト形式のファイルを読み込む

プロパティリストファイルからデータを読み込むには initWithContentsOfFile: メソッドを使います。
以下がその例です。
NSArray *array = [[[NSArray alloc] initWithContentsOfFile:filePath] autorelease];
if (array) {
  for (NSString *data in array) {
    NSLog(@"%@", data);
  }
} else {
  NSLog(@"%@", @"データが存在しません。");
}

保存できるデータの種類

さきほども説明した通りおおもとのデータは NSArray か NSDictionary 型でないといけませんがその下の階層に保存できるデータの種類は複数あります。
プロパティリストで保存できるデータの種類は以下の通りです。
  • NSString
  • NSNumber
    実数型、数値型、ブール型に対応
  • NSData
  • NSDate
  • NSArray
  • NSDictionary

自作クラスのオブジェクトを保存する

プロパティリストは通常自作クラスのオブジェクトを保存することは出来ませんが、オブジェクトアーカイブして NSData オブジェクトに変換することで保存できるようになります。
下記プログラムiOS でオブジェクトをシリアライズする方法で作成した Person と Address クラスのオブジェクトプロパティリストに保存する例です。
Person *tYamada = [[[Person alloc] init] autorelease];
tYamada.name = @"山田太郎";
Address *yAddress = [[[Address alloc] init] autorelease];
yAddress.zipCode = @"104-0061";
yAddress.state = @"東京都";
yAddress.city = @"中央区";
yAddress.other = @"銀座1丁目";
tYamada.address = yAddress;

// 注意!tYamada オブジェクトをそのまま保存することはできない
// NSArray *array = [NSArray arrayWithObjects:tYamada, nil];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tYamada];
NSArray *array = [NSArray arrayWithObjects:data, nil];
BOOL successful = [array writeToFile:filePath atomically:YES];
if (successful) {
  NSLog(@"%@", @"データの保存に成功しました。");
}

プロパティリストに保存された自作クラスのオブジェクトを読み込む

プロパティリストからデータを読み込む時は NSArray クラスの initWithContentsOfFile: メソッドで NSArray オブジェクトを生成した後、NSKeyedUnarchiver クラスの unarchiveObjectWithData メソッドを使って復元します。
以下はその例です。
NSArray *array = [[[NSArray alloc] initWithContentsOfFile:filePath] autorelease];
if (array) {
  for (NSData *data in array) {
    Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"%@", person);
  }
} else {
  NSLog(@"%@", @"データが存在しません。");
}

プロパティリストはどんなデータを保存するのに向いているのか

プロパティリストの特徴はなんと言っても Property List Editor で手軽にデータの編集ができることです。
プロパティリストはプログラムで定数定義するには少し多いデータ(都道府県名リスト的なものなど)やプログラム上から変更することのないアプリ固有の設定情報などを保存するのに向いています。
NSKeyedArchiver を使ってバイナリを保存することもできますが Property List Editor で編集できないのであまり向いていません。