質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

4668閲覧

指定したURL内のファイル一覧取得

nanshime_2621

総合スコア32

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

3クリップ

投稿2015/08/19 03:17

App Groupsでshared containerに入れたファイル一覧を取得したいのですが、nilが返ってきます。(ファイルが存在することは確認済み)

contentsOfDirectoryAtPathメソッドの使い方の問題でしょうか。
また、contentsOfDirectoryAtURLメソッドもあり、こちらを使う方がいいのでしょうか。その場合、どのように書き換えたらよろしいでしょうか。

記載したコードは以下の通りです。

let fileManager = NSFileManager.defaultManager()
let destURL = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.jp.filetest")

let stringURL = destURL?.absoluteString

let fileList = fileManager.contentsOfDirectoryAtPath(stringURL!,error:nil)

for path in fileList!{
println(path as! NSString)
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

App Group を使った情報共有方法(準備)

さて、 App Groupを使うためには、まず iOS Dev Centerで App GroupのGroup IDを登録します。
「group.com.example.mygroup」というように、Bundle Identifierと同じようにドメイン名などから生成した一意な文字列の先頭に「group」をつけるのがいいでしょう。

Dec Centerでの設定が終わったら、共有したいアプリをXcodeで開きます。
ProjectファイルのCapability タブを開き、 App Groupの設定をonにします。
App Groupの機能をonにすると、さきほど iOS Dev Centerで設定した Group IDが表示されるので、チェックボックスをonにします。

すると、プロジェクトにEntitlementファイルが追加されます。
共有をしたいアプリやExtensionのすべてについてこの設定を行ってください。

App Group を使った情報共有 – shared userdefaults

ProjectファイルのApp Groupの設定が完了したら、アプリ間で共通につかえるデータ領域が確保されます。

まずは、共通の設定領域、shared userdefaultsから試してみましょう。

まずは設定した Group IDを使って、NSUserDefaultsのインスタンスを生成します。
あとは、通常のNSUserDefaults処理と同じように使えます。

// Save to sharedDefaults NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.mygroup"]; [sharedDefaults setObject:@"Kaoru" forKey:@"MyName"]; [sharedDefaults synchronize];

shared userdefaultsからの読み込みもほぼ同様です。

// Load from sharedDefaults NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.mygroup"]; NSString* strValue = [sharedDefaults objectForKey:@"MyName"]; NSLog(@"strValue is %@",strValue);

App Group を使った情報共有 shared container

さて、次はNSFileManagerを使って、共通領域、shared container のファイルを読み書きしてみましょう。

NSFileManagerのcontainerURLForSecurityApplicationGroupIdentifierを使い、Group IDを指定して shared container のパスへのNSURLを取得します。
そのパスにファイル名を付加して、あとは通常通りにsave/loadをすれば大丈夫です。

// Save to sharedContainer NSURL *fileURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"]; fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"]; NSDictionary* dict = @{ @"place":@"Tokyo", @"tel":@"03-1234-5678"}; [dict writeToURL:fileURL atomically:YES];

shared containerからの読み出しも同様です。

// Load from sharedContainer NSURL *fileURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"]; fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"]; NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfURL:fileURL]; NSString* strPlace = [dict valueForKey:@"place"]; NSLog(@"strPlace is %@",strPlace);

App Groupで保存された情報

さて、これで複数のアプリから、同じ領域のNSUserDefautlsやファイルにアクセスできるようになりました。

ただ、App Group機能については、まだまだ詳細な情報は少ないです。

投稿2015/08/19 04:18

piotcard

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanshime_2621

2015/08/28 07:12

Objective-Cは読めないのですが、丁寧な解説のため理解できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問