2013-08-19 76 views
0

大家好, 我有一個很難理解如何使用 (我第一次使用它們),希望有人能指出我朝着正確的方向 (沒有雙關語意)指針類之間的溝通:P (控制聲音,頁面編號,BG,音頻int和文字顯示),它指向包含文本@「Page01Text」 我想借此plist中 (的NSString *)textFromPlist指針@ 「Page01Text」並將其用於HighLighter類與指針

我能夠在hello世界層(其日誌記錄TextManagerWithpageNum)中記錄聲音,pagenumber,bg,audio int和文本等的輸出,所以我知道plist正在讀取,但由於某種原因,我不能鏈接textFromPlist我希望能夠使用TextManagerWithpageNum類中的textFromPlist,並讓hilighter類與它一起工作(此類將高亮文本並使用plist提供的音頻間隔) 這塊代碼它返回(NULL)

@interface HighLighter.h 

    TextManagerWithpageNum *myClassAccess; 
    //declaring the TextManagerWithpageNum class so I can access textFromPlist 


    @implementation HighLighter.m 
    -(NSString *)Sentance01 
    { 
    NSString *textFromTextManager = myClassAccess.textFromPlist; 
    NSString *storyText = [NSString stringWithFormat:@"%@",textFromTextManager]; 
     return [[[NSString alloc]initWithString:StoryText]autorelease]; 
     //doesn't crash but doesn't load text 

    NSLog(@"text form plist @%",storyText); 

    } 

什麼是我做錯了? (我有一個int數組,我也希望鏈接,但是以爲我會從NSString開始,因爲我認爲這會更簡單。) 任何幫助都將是美好的,親切的問候, 娜塔莉。

@interface TextManagerWithpageNum : CCLayer 
    NSString* textFromPlist_Pntr; 
    @property(nonatomic, readonly) NSString* textFromPlist; 
    //NSString* textFromPlist is an item on the plist @"page01" which contains text for the page 

    @property(nonatomic, readonly) NSString* audioInterval; 
    //NSString* AudioInterval is an array on the plist @"AudioTimings_PG01" 

    @implementation TextManagerWithpageNum 
    @synthesize textFromPlist = textFromPlist_Pntr; 
    @synthesize audioInterval = _audioInterval; 
+1

如果你發佈你的真實代碼會有所幫助:'storyText'作爲'StoryText'寫在下一行,'NSLog' *不能打印任何東西,因爲它遵循'return'語句。 –

+1

嘗試學習Objective-C沒有*第一*有很好的理解指針是非常不明智的。您應該先從C開始,然後在您合理地使用C時勝任Objective-C。世界可以等待幾個月,以獲得您的夢幻般的病毒應用程序。 –

+0

對不起,這個「學習C第一」的建議是bollocks。在所選語言的背景下學習主題幾乎總是最好的。不這樣做也會教會初學者當她升級到其他語言時她不得不忘記的所有事情。像是的,在ObjC中發送消息給一個零指針是完全有效的 - 只是不會做任何事情(甚至不會崩潰)。或者不,你不使用malloc來爲類實例分配內存。等。 – LearnCocos2D

回答

1

在類之間傳遞任何數據時有幾個選項。我將使用ObjectA發送到ObjectB的示例SomeData對象來顯示兩者。您還可以使用類級別的方法,例如,在指向單例對象的指針中發送或接收數據。我不會告訴你如何做到這一點,因爲聽起來不符合你的問題。

選項1

ObjectB定義的接收的消息。

@interface ObjectA 
{ 
    SomeData *someDataPointer; 
    ObjectB *someObjectB; 
} 
@end 

@implementation ObjectA 

-(void)someMethod 
{ 
    someDataPointer = [[SomeData alloc] init]; // Or whatever way you want to create and set someDataPointer 
    [someObjectB receiveData:someDataPointer]; 

    // Note: if you will be calling receiveData on someObjectB much later than the 
    // time of creation of someDataPointer, you should retain someDataPointer to 
    // hold onto it until you need to pass it on. 
    // ie) 
    // [someDataPointer retain]; 
} 

@end 

@interface ObjectB 
-(void)receiveData:(SomeData *)dataPtr; 
@end 

@implementation ObjectB 

-(void)receiveData(SomeData *)dataPtr 
{ 
    // Here the data from someDataPointer will also be pointed to by dataPtr 
    // Use dataPtr now 
    [self doSomethingWithData:dataPtr]; 
} 

@end 

選項2

ObjectA定義一個發送消息。

@interface ObjectA 
{ 
    SomeData *someDataPointer; 
} 

@property (nonatomic, retain) SomeData *someDataPointer; 

@end 

@implementation ObjectA 
@synthesize someDataPointer = someDataPointer_; 
@end 

@interface ObjectB 
{ 
    ObjectA *someObjectA; 
} 
@end 

@implementation ObjectB 

-(void)someMethod 
{ 
    SomeData *dataPtr = [someObjectA getSomeDataPointer]; 
    // Now do something with dataPtr 
} 

@end 

我希望有所幫助。我想向你展示這兩種技術,以便你可以學習將它應用到你的案例中。如果您有任何問題,請告訴我。

+0

非常感謝Keifer,它的一個很好的清晰解釋,正是我需要的!,可能需要一點時間才能讓我的代碼與這個問題相關,但是每一個好的信息很長一段時間才能實現這一點 - 我稍後可能會有問題,但現在我已經開始使用代碼了! – StackBuddy

+0

很高興幫助!如果它適合您,Stack Overflow的文化就是提供您喜歡的答案,然後單擊複選標記來指定最佳答案。 –