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

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

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

NSLog(@"Failed to read the array back from disk.");

}

} else {

NSLog(@"Failed to save the array to disk.");

}

ΠœΠ΅Ρ‚ΠΎΠ΄ экзСмпляра writeToFile: atomically:, относящийся ΠΊ классу NSArray, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ лишь массивы, содСрТащиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²:

β€’ NSString;

β€’ NSDictionary;

β€’ NSArray;

β€’ NSData;

β€’ NSNumber;

β€’ NSDate.

Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² массив ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΎ ваши Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π½Π° дискС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ провСряСт, относятся Π»ΠΈ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² составС массива ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ дСлаСтся ΠΏΠΎ Ρ‚ΠΎΠΉ простой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС срСда Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния Objective-C просто Π½Π΅ разбСрСтся, ΠΊΠ°ΠΊ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° дискС. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ инстанцируСм класс ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Person, создаСм для этого класса Π΄Π²Π° свойства, ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… соотвСтствуСт ΠΈΠΌΠ΅Π½ΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ. Π—Π°Ρ‚Π΅ΠΌ инстанцируСм экзСмпляр этого класса ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ ΠΊ массиву. Как ΠΆΠ΅ массив смоТСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ пСрсонС Π½Π° диск? Никак, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ систСма Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ трСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° называСтся Β«ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ½Π³Β». Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС iOS ΠΎΠ½Π° Ρ€Π΅ΡˆΠ΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для пСрСчислСнных Ρ‚ΠΈΠΏΠΎΠ².

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° массивы. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС ΠΈ считываниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· словаря происходит практичСски Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² случаС с массивами. ИмСна ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€Π°Π²ΠΈΠ»Π° сохранСния словарСй Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ» сохранСния массивов. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


NSString *filePath = [NSTemporaryDirectory()

stringByAppendingPathComponent:@"MyFile.txt"];


NSDictionary *dict = @{

@"first name": @"Steven",

@"middle name": @"Paul",

@"last name": @"Jobs",

};


if ([dict writeToFile: filePath atomically: YES]){

NSDictionary *readDictionary = [[NSDictionary alloc]

initWithContentsOfFile: filePath];


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ сравним словари ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, являСтся Π»ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, считываСмый

Π½Π°ΠΌΠΈ с диска, Ρ‚Π΅ΠΌ самым, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΈ Π½Π° Π΄ΠΈΡΠΊΠ΅ */

if ([readDictionary isEqualToDictionary: dict]){

NSLog(@"The file we read is the same one as the one we saved.");

} else {

NSLog(@"Failed to read the dictionary from disk.");

}

} else {

NSLog(@"Failed to write the dictionary to disk.");

}


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ записываСтся Π½Π° диск, послС Ρ‡Π΅Π³ΠΎ считываСтся ΠΈΠ· этого самого мСста. ПослС считывания ΠΌΡ‹ сравниваСм Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохранили Π½Π° дискС. Π’Π°ΠΊ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° словаря содСрТат ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ примСняли для сохранСния содСрТимого Π½Π° дискС высокоуровнСвыС классы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NSString ΠΈ NSArray. А Ρ‡Ρ‚ΠΎ, Ссли потрСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ массив Π±Π°ΠΉΡ‚ΠΎΠ²? Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ дСлаСтся просто. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ массив ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… символов ΠΈ Π΅Π³ΠΎ трСбуСтся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° диск:


char bytes[4] = {'a', 'b', 'c', 'd'};


Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ этот Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ массив Π±Π°ΠΉΡ‚ΠΎΠ² Π½Π° дискС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом, достаточно ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ высокоуровнСвой структурС Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NSData, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ NSData для считывания Π΄Π°Π½Π½Ρ‹Ρ… с диска ΠΈ записи ΠΈΡ… Π½Π° диск. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ сохранСния ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, примСняСмыС Π² классС NSData, практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ классов NSArray ΠΈ NSDictionary. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сохранСния Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС ΠΈ считывания ΠΈΡ… с диска:


NSString *filePath = [NSTemporaryDirectory()

stringByAppendingPathComponent:@"MyFile.txt"];


char bytes[4] = {'a', 'b', 'c', 'd'};


NSData *dataFromBytes = [[NSData alloc] initWithBytes: bytes

length: sizeof(bytes)];


if ([dataFromBytes writeToFile: filePath atomically: YES]){

NSData *readData = [[NSData alloc] initWithContentsOfFile: filePath];

if ([readData isEqualToData: dataFromBytes]){

NSLog(@"The data read is the same data as was written to disk.");

} else {

NSLog(@"Failed to read the data from disk.");

}

} else {

NSLog(@"Failed to save the data to disk.");

}

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

Π Π°Π·Π΄Π΅Π» 12.0.

12.3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π½Π° дискС

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° дискС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² Π½ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· вашСго прилоТСния.

РСшСниС

ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ экзСмпляра createDirectoryAtPath: withIntermediateDirectories: attributes: error:, относящимся ΠΊ классу NSFileManager, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:


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

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


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


NSString *tempDir = NSTemporaryDirectory();

NSString *imagesDir = [tempDir stringByAppendingPathComponent:@"images"];


NSError *error = nil;

if ([fileManager createDirectoryAtPath: imagesDir

withIntermediateDirectories: YES

attributes: nil

error:&error]){


NSLog(@"Successfully created the directory.");


} else {

NSLog(@"Failed to create the directory. Error = %@", error);

}


self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

API, прСдоставляСмыС классом NSFileManager, ΠΎΡ‡Π΅Π½ΡŒ просты Π² использовании. НичСго ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для сохранСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π½Π° дискС эти API Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ написания всСго Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΊΠΎΠ΄Π°. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠ΅Ρ‚ΠΎΠ΄ createDirectoryAtPath: withIntermediateDirectories: attributes: error: ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ²Π°Ρ‚Ρ‹ΠΌ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ всС Ρ‚Π°ΠΊ ΠΏΠ»ΠΎΡ…ΠΎ. Π’ дальнСйшСм я расскаТу ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ:

β€’ createDirectoryAtPath β€” ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ;

β€’ withIntermediateDirectories β€” логичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Если ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ создаст ΠΈ всС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ images, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ data, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²Π»ΠΎΠΆΠ΅Π½ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ tmp, Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ data ΠΏΠΎΠΊΠ° Π½Π΅ создан, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΠ°Π·Π°Ρ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ tmp/data/images/, установив для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° withIntermediateDirectories Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС систСма создаст ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ data, ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ images;

β€’ attributes β€” ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ систСмС. Π­Ρ‚ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ создания ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Но Ρ‚ΡƒΡ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π΄Π°Ρ‚Π° ΠΈ врСмя внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄Π°Ρ‚Π° ΠΈ врСмя создания, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ созданного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°;

β€’ error β€” Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ‚ΠΈΠΏΠ° NSObject. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ошибками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² процСссС создания ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, цСлСсообразно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² этом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ NO), Π²Ρ‹ смоТСтС ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ошибкС ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ.

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

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

12.4. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², содСрТащихся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ список Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащихся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Акт пСрСчислСния ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ всС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ/ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, располоТСнныС Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

РСшСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра contentsOfDirectoryAtPath: error:, относящийся ΠΊ классу NSFileManager, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ пСрСчисляСм всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ссылки, располоТСнныС Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ:


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

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


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

NSString *bundleDir = [[NSBundle mainBundle] bundlePath];


NSError *error = nil;

NSArray *bundleContents = [fileManager

contentsOfDirectoryAtPath: bundleDir

error:&error];


if ([bundleContents count] > 0 &&

error == nil){

NSLog(@"Contents of the app bundle = %@", bundleContents);

}

else if ([bundleContents count] == 0 &&

error == nil){

NSLog(@"Call the police! The app bundle is empty.");

}

else {

NSLog(@"An error happened = %@", error);

}


self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

// Π’ΠΎΡ‡ΠΊΠ° пСрСопрСдСлСния для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки послС запуска прилоТСния

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прилоТСниях для iOS ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Π·Π°Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, поэтому рассмотрим ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° 10 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’Ρ‹ выполняСтС эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ сохраняСтС ΠΈΡ…, допустим, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ tmp/images/, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создали Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ вновь ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ, Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ список ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅). Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? НичСго слоТного. Π’Π°ΠΌ всСго лишь потрСбуСтся ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ содСрТимоС Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса NSFileManager. Как Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра contentsOfDirectoryAtPath: error:, относящийся ΠΊ классу NSFileManager, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² NSString, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ссылкам Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ нСпросто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² являСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ β€” ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΈ Ρ‚. Π΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ contentsOfDirec toryAtURL: includingPropertiesForKeys: options: error:. Рассмотрим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.