Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 111

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π˜Ρ‚Π°ΠΊ, учитывая сказанноС, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ наш класс:


#import Β«Person.hΒ»


NSString *const kFirstNameKey = @"FirstNameKey";

NSString *const kLastNameKey = @"LastNameKey";


@implementation Person


β€” (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject: self.firstName forKey: kFirstNameKey];

[aCoder encodeObject: self.lastName forKey: kLastNameKey];

}


β€” (instancetype)initWithCoder:(NSCoder *)aDecoder{

self = [super init];

if (self!= nil){

_firstName = [aDecoder decodeObjectForKey: kFirstNameKey];

_lastName = [aDecoder decodeObjectForKey: kLastNameKey];

}

return self;

}


@end


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с экзСмпляром класса NSCoder практичСски Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ со словарСм. Π Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вмСсто словарного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setValue: forKey: ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ encodeObject: forKey:, Π° вмСсто словарного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° objectForKey: задСйствуСм decodeObjectForKey:. ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΎΡ‚ словарСй ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹.

Π˜Ρ‚Π°ΠΊ, с этим классом всС понятно. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ двумя Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ классами. ΠœΡ‹ собираСмся сначала ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Person, Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· памяти, ΠΏΠΎΡ‚ΠΎΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ совпадаСт с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ записали Π² класс. ВсС это ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ прилоТСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΌ это Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ всСго:


#import Β«AppDelegate.hΒ»

#import Β«Person.hΒ»


@implementation AppDelegate


β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


/* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ имя ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ собираСмся Π·Π°Π΄Π°Ρ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ */

NSString *const kFirstName = @"Steven";

NSString *const kLastName = @"Jobs";


/* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π³Π΄Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ */

NSString *filePath = [NSTemporaryDirectory()

stringByAppendingPathComponent:@"steveJobs.txt"];


/* Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ */

Person *steveJobs = [[Person alloc] init];

steveJobs.firstName = kFirstName;

steveJobs.lastName = kLastName;


/* ΠΡ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ„Π°ΠΉΠ» */

[NSKeyedArchiver archiveRootObject: steveJobs toFile: filePath];


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΆΠ΅ ΠΊΠ»Π°ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ */

Person *cloneOfSteveJobs =

[NSKeyedUnarchiver unarchiveObjectWithFile: filePath];


/* ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ Π»ΠΈ ΠΈΠΌΡ ΠΈ фамилия Π² Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅

с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² Ρ€Π°Π½Π΅Π΅ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ */

if ([cloneOfSteveJobs.firstName isEqualToString: kFirstName] &&

[cloneOfSteveJobs.lastName isEqualToString: kLastName]){

NSLog(@"Unarchiving worked");

} else {

NSLog(@"Could not read the same values back. Oh no!");

}


/* Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, удаляСм Π΅Π³ΠΎ */

NSFileManager *fileManager = [[NSFileManager alloc] init];

[fileManager removeItemAtPath: filePath error: nil];


self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}


Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса archiveRootObject: toFile, относящийся ΠΊ классу NSKeyedArchiver. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сохранСно содСрТимоС. ВсС просто. А Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ? НС слоТнСС Π°Ρ€Ρ…ΠΈΠ²Π°Ρ†ΠΈΠΈ. Нам просто Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ класса unarchiveObjectWithFile:, относящСмуся ΠΊ классу NSKeyedUnarchiver. Π’ΡΡŽ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ класс Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π·Π° вас.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 12.1.

Π“Π»Π°Π²Π° 13. ΠšΠ°ΠΌΠ΅Ρ€Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ

13.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ устройств с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой iOS, допустим iPhone, ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π£ самого Π½ΠΎΠ²ΠΎΠ³ΠΎ iPhone Π΄Π²Π΅ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ всСго ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ. НСкоторыС устройства с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой iOS Π½Π΅ оснащСны ΠΊΠ°ΠΌΠ΅Ρ€Π°ΠΌΠΈ. Класс UIImagePickerController позволяСт программисту ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ интСрфСйс Camera ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ снимок ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ. Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈΠ»ΠΈ видСозаписи, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса UIImagePickerController, становятся доступны программисту.

Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассказано, ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ прямо ΠΈΠ· прилоТСния, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ фотографиям ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ (Photo Library) Π½Π° устройствС с iOS, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° iPod touch ΠΈΠ»ΠΈ iPad.

Π’ симуляторС iOS интСрфСйс Camera Π½Π΅ поддСрТиваСтся. ВсС прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ этот интСрфСйс, слСдуСт Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π° настоящСм устройствС с iOS, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ сначала попытаСмся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, имССтся Π»ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Π° Π½Π° Ρ‚ΠΎΠΌ устройствС с iOS, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, позволяСт Π»ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Π° Π²Π°ΠΌ (программисту) Π΄Π΅Π»Π°Ρ‚ΡŒ фотоснимки, Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ доступны ΠΎΠ±Π΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ MobileCoreServices.framework ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ сборкС. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:


#import Β«AppDelegate.hΒ»

#import <MobileCoreServices/MobileCoreServices.h>


@implementation AppDelegate


<# ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ вашСго ΠΊΠΎΠ΄Π° находится здСсь #>


Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅ΠΌ, Π² частности рассмотрим доступ ΠΊ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ фотографиям, располоТСнным Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»ΡŒΠ±ΠΎΠΌΠ°Ρ… Π½Π° устройствС с iOS. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚Π΅Ρ… ΠΆΠ΅ самых Π°Π»ΡŒΠ±ΠΎΠΌΠ°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Photos (Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ), ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму iOS.

Но ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, находящСйся Π² альбомС, ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΠΊ видСозаписи. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с фотографиями ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ адрСс снимка ΠΈ смоТСм просто Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² экзСмпляр NSData Π»ΠΈΠ±ΠΎ прямо Π² экзСмпляр UIImage. Π’ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌ случаС с Π²ΠΈΠ΄Π΅ΠΎ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ» находится Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ. ВмСсто этого ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ адрСс:

assets-library://asset/asset.MOV?id=10000 00004&ext=MOV

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ адрСсами Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Assets Library (Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов). Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ доступ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдоставляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Photos (Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ). Π­Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΈ, отснятыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурсов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для сохранСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° устройствС. ΠŸΠΎΡ‚ΠΎΠΌ эти Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Ρ€ΠΎΠ»ΠΈΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доступны для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ (Photo Library), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся доступ ΠΊ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ.

Π§Ρ‚ΠΎΠ±Ρ‹ всС ΠΊΠΎΠ΄Ρ‹ ΠΈΠ· этой Π³Π»Π°Π²Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Assets Library ΠΈ Mobile Core Services Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π²ΠΎ всС ваши Ρ„Π°ΠΉΠ»Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ„Π°ΠΉΠ»Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с послСднСй вСрсиСй компилятора LLVM, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ поддСрТиваСтся Ρ€Π°Π±ΠΎΡ‚Π° с модулями:


#import Β«AppDelegate.hΒ»

#import <MobileCoreServices/MobileCoreServices.h>

#import <AssetsLibrary/AssetsLibrary.h>


@implementation AppDelegate


<# ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ вашСго ΠΊΠΎΠ΄Π° находится здСсь #>


Π§Ρ‚ΠΎΠ±Ρ‹ всС ΠΊΠΎΠ΄Ρ‹ ΠΈΠ· этой Π³Π»Π°Π²Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги β€” Ρ‚Π°ΠΊ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Assets Library.

1. Π’ Xcode Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ярлыкС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ†Π΅Π»ΡŒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ.

3. Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части интСрфСйса Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Build Phases (Π­Ρ‚Π°ΠΏΡ‹ сборки).

4. ΠΠ°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ + Π² Π½ΠΈΠΆΠ½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π° Link Binaries with Libraries (Π‘Π²ΡΠ·Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ).

5. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· списка Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ MobileCoreServices.framework.

6. ΠΠ°ΠΆΠΌΠΈΡ‚Π΅ Add (Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ).


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ рСсурса, имСя ссылку Π½Π° этот рСсурс, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги.

1. Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° ALAssetsLibrary. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов прСдоставляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΡƒ (Bridge), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ доступ ΠΊ Ρ‚Π΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠ°ΠΌ ΠΈ фотографиям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны для прилоТСния Photos (Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ).

2. Π”ля доступа ΠΊ рСсурсу Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ экзСмпляра assetForURL: resultBlock: failureBlock, относящимся ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ инициализация этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π° шагС 1). РСсурс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Apple ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΈ GCD рассказано Π² Π³Π»Π°Π²Π΅ 7.

3. Π’ысвободитС Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° шагС 1.

На этом этапС Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос: ΠΊΠ°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ рСсурса? ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ resultBlock ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра assetForURL: resultBlock: failureBlock, относящСгося ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° ALAsset. ALAsset β€” это класс, прСдоставляСмый Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов, ΠΎΠ½ инкапсулируСт (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя) рСсурс, доступный для Photos (Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ) ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прилоТСния iOS, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот рСсурс. Π’Π΅ΠΌΠ° сохранСния фотоснимков ΠΈ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСна Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… 13.4 ΠΈ 13.5. О ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ рСсурсов ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… 13.6 ΠΈ 13.7.