2011-03-30 51 views
1

確定這應該是容易的,但仍然我在這裏打破了我的頭:的Xcode:合格的NSString從一類到另一個問題

在我的根視圖控制器我有一個NSString名爲「項」,並可以正常使用。我NSLogged它和它的作品。 我有一個名爲'ParseOperation'另一個類,並在其中我有一個NSString稱爲「localEntry」和IM試圖發送到「ParseOperation」,從「RootViewController的」變量「條目」這是我的RootViewController的代碼:

RootViewController.m 

ParseOperation *parseOperation = [[ParseOperation alloc] init]; 
parseOperation.localEntry = entry; 

它只是不起作用。如果我在我的ParseOperation.m中返回「NSLog」,但是如果我在我的RootViewController上執行該操作,它將返回正確的變量。是的,我也進口ParseOperation.h

這裏是ParseOperation代碼(僅使用localEntry的部分):

ParseOperation.h 

@interface ParseOperation : NSOperation <NSXMLParserDelegate> 
{ 
    NSString  *localEntry; 
} 
@property (nonatomic, retain) NSString *localEntry; 

@end 

ParseOperation.m 

@synthesize localEntry; 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
            namespaceURI:(NSString *)namespaceURI 
            qualifiedName:(NSString *)qName 
             attributes:(NSDictionary *)attributeDict 
{ 

    //NSLog(@"entrada %@",localEntry); 
    if ([elementName isEqualToString:localEntry]) 
    { 
     self.workingEntry = [[[AppRecord alloc] init] autorelease]; 
    } 
    storingCharacterData = [elementsToParse containsObject:elementName]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
            namespaceURI:(NSString *)namespaceURI 
           qualifiedName:(NSString *)qName 
{ 
    if (self.workingEntry) 
    { 
     if (storingCharacterData) 
     { 
      NSString *trimmedString = [workingPropertyString  stringByTrimmingCharactersInSet: 
            [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
      [workingPropertyString setString:@""]; // clear the string for next time 
      if ([elementName isEqualToString:kIDStr]) 
      { 
       self.workingEntry.appURLString = trimmedString; 
      } 
      else if ([elementName isEqualToString:kNameStr]) 
      {   
       self.workingEntry.appName = trimmedString; 
      } 
      else if ([elementName isEqualToString:kImageStr]) 
      { 
       self.workingEntry.imageURLString = trimmedString; 
      } 
      else if ([elementName isEqualToString:kArtistStr]) 
      { 
       self.workingEntry.artist = trimmedString; 
      } 
     } 
     else if ([elementName isEqualToString:localEntry]) 
     { 
      [self.workingArray addObject:self.workingEntry]; 
      self.workingEntry = nil; 
     } 
    } 
} 

謝謝!

回答

0

回答我的問題,我不得不到ViewController和ParseOperation加入編程連接下面我在parseOperation頭:

@class RootViewController; 

RootViewController *rootViewController; 

@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 

而且在ParseOperation的M檔如下:

#import "RootViewController.h" 

rootViewController = [[RootViewController alloc]init]; 

之後,在分析操作我只是宣稱:

localEntry= rootViewContoller.entry; 
4

很可能,rootViewController是零。當你聲明和合成一個屬性時,它只會爲你創建getter/setter方法。它不會將變量初始化爲任何內容。

由於Objective-C的讓你的消息零,你會不會當你寫崩潰:

NSString *localentry = rootViewController.entry; 

消息無直接返回零。所以如果rootViewController是零,那麼localentry也是零。

確保你實際上爲這個類設置了rootViewController。例如,

ParseOperation *myOperation = [[ParseOperation alloc] init]; 
[myOperation setRootViewController:rootViewController]; 

或者,確保您已在Interface Builder中建立了插座連接。無論如何,我懷疑rootViewController是零。 (你可以用NSLog語句來測試這個)。

+0

謝謝我以不同的方式開始執行tho ...而不是我聲明的所有ParseOperation: 'ParseOperation * parseOperation = [[ParseOperation alloc] init];' 併發送變量,就像'parseOperation.localEntry = entry' 但仍然是相同的結果 – Ponchotg 2011-03-30 23:58:45

+0

@Ponchotg:parseOperation.localEntry = entry是調用setter的語法簡寫。它相當於[parseOperation setLocalEntry:entry]。在Objective-C 2.0中引入的點語法只是爲了方便而隱藏了這個方法調用,但實際上它調用了setter。 – 2011-03-31 00:08:39

+0

我發了一些更多的代碼,希望你能幫助和謝謝! – Ponchotg 2011-03-31 01:40:21

2

您確定,因爲它是一個IBOutlet,您在界面構建器中連接到它嗎?

+0

我做到了!但無論如何,我開始以不同的方式... ...而不是我聲明的ParseOperation: 'ParseOperation * parseOperation = [[ParseOperation alloc] init];' 併發送變量就像'parseOperation.localEntry = entry' 但仍然是相同的結果 – Ponchotg 2011-03-30 23:56:43

+0

好吧在你分配alloc之後立即設置一個斷點,初始化這個對象並確保它由於某種原因不返回null,並讓我知道結果。 – Dmacpro 2011-03-31 00:16:31

+0

謝謝@Dmacpro回來了(我想):「parseOperation =(ParseOperation *)0x4b8ab90」 – Ponchotg 2011-03-31 00:28:21

相關問題