Obj C'de strings siyahısını yaratmaq

C obyekti zahirən sadə vəzifələri son dərəcə çətinləşdirmək üçün çarxlara atlayır.

Yalnız bir xətt, image1.jpg , image2.jpg və s. və s

yəni, döngədə var imgString:String='image'+i+'.jpg;

appendString ilə NSMutableString metodundan istifadə etmək appendString ?

Yanlış etdiyim nədir?

 NSMutableString *imgString; for(int i=1;i<=NUMIMAGES;i++){ imgString.appendString(@"image"+i+@".jpg"); } 

Aşağıdakı səhvləri alıram

səhv: 'appendString' üzvünün tələbi bir şəkildə bir quruluş və ya birliyin olmamasıdır

-11
12 июня '10 в 23:01 2010-06-12 23:01 eco_bach 12 İyun '10 'da saat 23:01' də təyin olundu 2010-06-12 23:01
@ 5 cavab

Mənim image5image4image3image2image1.jpg xəttin image5image4image3image2image1.jpg in string3 necə cavab verə biləcəyini təsəvvür edə bilmərəm (5-ə qədər NUMIMAGE ilə qurulmuş kodunuzu Xcode Foundation layihəsinə daxil etdik).

C obyekti zahirən sadə vəzifələri son dərəcə çətinləşdirmək üçün çarxlara atlayır.

Objective-C manual və String Proqramlaşdırma Kılavuzu'nu oxuyun, sonra nəticə çıxarın. Anladığınız şeyi tənqid etməməniz ümumiyyətlə əksinədir (hepimiz bunu edib, baxmayaraq məyus etdikdə bunu etmək asandır).

Yalnız bir xətt, image1.jpg, image2.jpg və s. və s

Naive həll:

 #define NUMIMAGES 5 NSMutableArray *fileNames = [NSMutableArray array]; for(int i = 0; i<5; i++) [fileNames addObject: [NSString stringWithFormat: @"image%d.jpg", i]]; NSLog(@"fileNames %@", fileNames); 

Çıxışlar:

 fileNames ( "image0.jpg", "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg" ) 

Unutmayın ki, sadəlövh bir qərar barədə xüsusi bir şey yoxdur. Daha qüsursuz, daha az səmərəli və lazım olandan daha çox kod ehtiva edir.

Bir mümkün yaxşı həll

  • Resurs layihəsi üçün bütün şəkilləri resurs kimi əlavə edin.

  • Bütün şəkilləri URL-lərin eyni vaxtda tutması üçün NSBundle API-nı istifadə edin.

yəni:

 NSArray *paths = [[NSBundle mainBundle] pathsForResourcesOfType: @"jpg" inDirectory: nil]; 

Bu, yalnız kodunuzdan imza adlarının sabit kodlamasını aradan qaldırmaqla yanaşı, dizin numaralandırması ve yolun yaradılması da optimize etmenize imkan verir. Yalnız bir alt kağızı yükləmək istəyirsinizsə - oyun yazdığınızı və canavarlarla əlaqəli bir sıra şəkillərə sahib olduğunuzu bildirin - sonra bütün əlaqədar təsvirləri bir qovluğa yerləşdirin, resursları qaynağınıza əlavə edin və sonra bu qovluq adını təsvir edilən ikinci arqument kimi verin yuxarıdakı üsul.

Bütün bunlar - və daha çox - Resurs Proqramlaşdırma Kılavuzunda təsvir olunur.

37
13 июня '10 в 0:22 2010-06-13 00:22 Cavab 13 iyun, saat 10: 00 -da veriləcək. 2010-06-13 00:22

Birincisi, zəng üsulları üçün sintaksisiz əlil - mən məqalə-C məqsədi ilə alma oxumaq gəlir. Sintaksis [someObject someMethod] üsulu çağırmaq üçün istifadə [someObject someMethod] diqqətəlayiqdir.

Növbəti problem, siz əlavə etməyə çalışdığınız bir simli yaratmırsınız, məsələn, istifadə edə bilərsiniz. Bunun üçün [NSMutableString string] .

border=0

Bəzi biçimlendirilmiş simli ilə dəyişdirilə bilən bir simli birləşdirməyə davam edərkən -appendFormat: istifadə edin, məsələn:

 NSMutableString *imgString = [NSMutableString string]; for (int i=1; i<=NUMIMAGES; i++) { if (i > 1) [imgString appendString:@", "]; [imgString appendFormat:@"image%d.jpg", i]; } 
7
12 июня '10 в 23:17 2010-06-12 23:17 Cavab Georg Fritzsche tərəfindən 12 İyun '10' da 23:17 'də verildi. 2010-06-12 23:17

Amma nə üçün çalışdığınıza əmin deyiləm, amma bu ilham ola bilər:

 NSMutableArray *fileNames = [NSMutableArray array]; for (int i=0; i<max; i++) [fileNames addObject:[NSString stringWithFormat:@"image%i.jpg", i]]; 

Xəttinizə gəldikdə, heç bir məna verməyən bir nöqtənin sintaksisindən istifadə edirsiniz. Bundan əlavə, siz Objective-C-də string concatenation üçün istifadə etməyin. appendString üçün doğru sintaksis aşağıdakılardır:

 NSMutableString *foo = [NSMutableString string]; [foo appendString:@"Hello, "]; [foo appendString:@"world!"]; 

Birinci satırda gördüyünüz kimi, istifadə etməzdən öncə obyektlərin işə salınması məsləhət görülür. appendString üçün appendString NSMutableString metodunu istifadə edə bilərsiniz və ya yeni bir dəyişkən simli yarada bilərsiniz:

 NSString *one = @"Hello, "; NSString *two = [one stringByAppendingString:@"world!"]; 

stringWithFormat üçün daha çox simvolu varsa, stringWithFormat başlanğıcını istifadə edə bilərsiniz:

 NSString *composed = [NSString stringWithFormat:@"%@, %@ %@!", @"Hello", @"Objective-C", @"world"]; 

Əgər Objektiv-C bəzi şeyləri son dərəcə çətinləşdirdiyini hiss etsəniz, həqiqətən bunu öyrənməklə bəzi üstünlük əldə edə bilərsiniz;)

2
12 июня '10 в 23:03 2010-06-12 23:03 Cavab 12 İyun tarixində saat 23: 30-da zulu veriləcək. 2010-06-12 23:03

İstədiyiniz şeyi ən sadə kod belə bir şey olacaq:

 NSMutableString * string = [NSMutableString string]; for (int i = 1; i <= NUMIMAGES; i++) [string appendFormat: @"image%d.jpg", i]; 

Nədir? Gördüyünüz kimi, appendFormat: həqiqətən şeyi daha asan edir! Amma niyə bunu etmək istədiyini başa düşmürəm. Aşağıdakı kimi bir şey əldə edəcəksiniz:

 "image1.jpgimage2.jpgimage3.jpgimage4.jpgimage5.jpg. . ." 

Nə həqiqətən nail olmaq üçün çalışırsınız? Dave

1
13 июня '10 в 0:49 2010-06-13 00:49 Cavab Dave Jewell tərəfindən 13 iyun 'da 0:49 2010-06-13 00:49' də verilir

Bütün cavabları qiymətləndirin!
Bəzən göründüyü kimi, Objective C-də təcrübəli olmaq üçün bir masochist olmaq lazımdır.
Daha yüksək cəhd edin, amma başa çatdı

 NSString *string1 = @"image"; NSString *string2; NSString *string3 = @".jpg"; NSString *incString; //*/ for(int i=1;i<=NUMIMAGES;i++) { incString=[NSString stringWithFormat:@"%d",i]; string2 = [string1 stringByAppendingString:incString]; string3 = [string2 stringByAppendingString:string3]; } 
-7
12 июня '10 в 23:30 2010-06-12 23:30 cavab 12 iyun 2010- cu il saat 23: 30-da Eko_bax tərəfindən verilir

bağlı digər suallar və ya sual soruşun