2012-03-17 80 views
0

儘管我知道至少有2或3個主題有這個名字,但我沒有找到一個適合我的問題的答案: 我想編輯一個Plist(已創建通過zwoptex(圖像/動畫程序)),以便將其中的每個數字除以2. 因此,在我的plist中,我確實有一些鍵,如{spriteOffset} {{182,160},{58,75}}或{ 192,165}作爲價值。那些是NSStrings,我只是想修改數字,所以我需要檢查是否有一個「{」或一個空格或這樣的數字,然後投射數字。 事情是我真的不知道該怎麼做..... 此外,似乎我失去了我的plist管理的東西。我已經把用於顯示每個在我的plist這些字符串的一些NSLogs,但是....沒有東西顯示... 因此,這裏是我的代碼:目標C:寫入Plist

-(void)DivideValues 
{ 
    for(NSString * plistName in plistSubpathsByName) 
{ 
    NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@.plist",plistName]]; 

    for(NSDictionary * sprite in [infoDict objectForKey:@"frames"]) 
    { 
     for(NSString * string in [infoDict objectForKey:@"spriteColorRect"]) 
     { 
      NSLog(@"%@",string); 
     } 
     for(NSString * string in [infoDict objectForKey:@"spriteOffset"]) 
     { 
      NSLog(@"%@",string); 
     } 
     for(NSString * string in [infoDict objectForKey:@"spriteSize"]) 
     { 
      NSLog(@"%@",string); 
     } 
     for(NSString * string in [infoDict objectForKey:@"spriteSourceSize"]) 
     { 
      NSLog(@"%@",string); 
     } 
     for(NSString * string in [infoDict objectForKey:@"textureRect"]) 
     { 
      NSLog(@"%@",string); 
     } 
    } 

    } 
} 

感謝您的任何迴應,我希望你你的職業生涯/激情的所有好運

回答

0

好吧,我做了這麼成功,如果任何人有興趣在這裏是代碼:

-(void)DivideValues 
{ 
for(NSString * xflName in [xflSubpathsByName objectEnumerator]){ 

    NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:[sourceFolder stringByAppendingPathComponent:xflName]]; 

    NSDictionary * dictionary = [infoDict objectForKey:@"frames"]; 
    NSMutableDictionary * mutabledictionary = [[dictionary mutableCopy] autorelease]; 

    for(NSString * pngFileName in dictionary) { 

     NSDictionary * sprite = [dictionary objectForKey:pngFileName]; 

     NSLog(pngFileName); 
     NSMutableDictionary * mutablesprite = [[sprite mutableCopy] autorelease]; 

     NSString * newstring = [self castSpriteRect:[sprite objectForKey:@"spriteColorRect"]]; 
     [mutablesprite setObject:newstring forKey:@"spriteColorRect"]; 

     newstring = [self castSprite:[sprite objectForKey:@"spriteOffset"]]; 
     [mutablesprite setObject:newstring forKey:@"spriteOffset"]; 

     newstring = [self castSprite:[sprite objectForKey:@"spriteSize"]]; 
     [mutablesprite setObject:newstring forKey:@"spriteSize"]; 

     newstring = [self castSprite:[sprite objectForKey:@"spriteSourceSize"]]; 
     [mutablesprite setObject:newstring forKey:@"spriteSourceSize"]; 

     newstring = [self castSpriteRect:[sprite objectForKey:@"textureRect"]]; 
     [mutablesprite setObject:newstring forKey:@"textureRect"]; 

     [mutabledictionary setObject:mutablesprite forKey:pngFileName]; 

    } 

    [infoDict setObject:mutabledictionary forKey:@"frames"]; 
      [infoDict writeToFile:[sourceFolder stringByAppendingPathComponent:xflName] atomically:NO]; 
    } 

if(!cancelling) 
    ++digestStage; 
else 
    digestStage = End; 
} 

-(NSString *)castSprite:(id)obj{ 
CGPoint point = NSPointFromString((NSString *)obj); 
int i = (int)point.x%2 == 0 ?(int)point.x/2:1+(int)point.x/2; 
int j = (int)point.y%2 == 0 ?(int)point.y/2:1+(int)point.y/2; 
NSString * res = [NSString stringWithFormat:@"{%d, %d}",i,j]; 
return res; 
} 

-(NSString *)castSpriteRect:(id)obj{ 
CGRect point = NSRectFromString((NSString *)obj); 
int i = (int)point.origin.x%2 == 0 ?(int)point.origin.x/2:1+(int)point.origin.x/2; 
int j = (int)point.origin.y%2 == 0 ?(int)point.origin.y/2:1+(int)point.origin.y/2; 
int y = (int)point.size.width%2 == 0 ?(int)point.size.width/2:1+(int)point.size.width/2; 
int x = (int)point.size.height%2 == 0 ?(int)point.size.height/2:1+(int)point.size.height/2; 
NSString * res = [NSString stringWithFormat:@"{{%d, %d}, {%d, %d}}",i,j,y,x]; 
return res; 
} 
0

你的例子記錄什麼都不是原因很可能是因爲你的內部for..in循環可能看錯字典:外循環得到一個字典sprite,所以不應該內循環在那看鑰匙字典?

如果你想讀取一個屬性列表,改變其中的一些值,並重新寫出相同的屬性列表,你可能會發現看看NSPropertyListSerialization類很有用 - 它可以讓你快速得到一個結構來自plist數據的可變數組/字典,所以你可以迭代它們,但是你想改變其中的值,然後將整個事件再次序列化回數據。 (如果你使用dictionaryWithContentsOfFile:你會得到一個可變的字典,但都在它的容器將是不變的,所以你有你的迭代過程中做的所有的地方mutableCopy和調酒內容。)

沒時間現在寫更多的細節,但如果查找NSPropertyListSerialization的文檔不幫助你,我可能稍後編輯答案。

+0

好,謝謝很多朋友說我要去看看它 – nTNT2 2012-03-18 14:33:22

0

首先,您應該將[infoDict objectForKey:@"spriteColorRect"]替換爲[sprite objectForKey:@"spriteColorRect"],因爲精靈可能是包含更多信息的字典。
您看不到任何日誌,因爲-objectForKey:返回nil表示不存在的鍵。

要更改這些值,您可以嘗試從字符串中創建CGPoint或CGRect,然後更改它並最終將其轉換回字符串。 (CGPointFromNSString() and NSStringFromCGPoint)

要保存修改後的版本的字典,請使用NSDictionary的-writeToFile:atomically:

+0

好嗎非常感謝。演員似乎非常棘手,但我會做到這一點! – nTNT2 2012-03-18 14:34:17