2011-09-07 66 views
0
我在與我的應用程序有問題

解析XML,我試圖通過複製一個標籤來保存核心數據的東西,但它給我這個錯誤幫助iOS中

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [__ NSCFString appendString:]:無參數'

這是代碼

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 



    ClientDownload *currentClientDownload = [[xmlClientDownloadParser clientArray] objectAtIndex:indexPath.row]; 


    CGRect contentFrame = CGRectMake(45, 2, 265, 30); 
    clientName = [[[UILabel alloc] initWithFrame:contentFrame] autorelease]; 
    clientName.numberOfLines = 2; 
    clientName.font = [UIFont boldSystemFontOfSize:12]; 
    clientName.text = [currentClientDownload NAME]; 
    [cell.contentView addSubview:clientName]; 

    CGRect detailFrame1 = CGRectMake(45, 40, 265, 30); 
    clientMobile = [[[UILabel alloc] initWithFrame:detailFrame1] autorelease]; 

    CGRect detailFrame2 = CGRectMake(45, 40, 265, 30); 
    clientAccount = [[[UILabel alloc] initWithFrame:detailFrame2] autorelease]; 

    clientAccount.font = [UIFont systemFontOfSize:10]; 
    clientAccount.text = [currentClientDownload ACCOUNT]; 
    clientMobile.font = [UIFont systemFontOfSize:10]; 
    clientMobile.text = [currentClientDownload MOBILE]; 


    [cell.contentView addSubview:clientAccount]; 
    [cell.contentView addSubview:clientMobile]; 

    NSLog(@"SaveData"); 
    Clients *client = (Clients *)[NSEntityDescription insertNewObjectForEntityForName:@"Clients" inManagedObjectContext:managedObjectContext]; 
    if((clientName.text) || (clientAccount.text) || (clientMobile.text) != NULL) 
    { 
     client.ACCOUNT = clientAccount.text; 
     client.NAME = clientName.text; 
     client.MOBILE = clientMobile.text; 
     NSLog(@"CLIENT GENERATED"); 
     NSError *error; 

     if (![managedObjectContext save:&error]) 
     { 
      NSLog(@"Problem saving: %@", [error localizedDescription]); 
     } 

} 
    NSError * error; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Clients" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 


    for (NSManagedObject *info in fetchedObjects) 

    { 

     NSLog(@"ACCOUNT: %@",[info valueForKey:@"ACCOUNT"]); 
     NSLog(@"NAME: %@",[info valueForKey:@"NAME"]); 
     NSLog(@"MOBILE: %@",[info valueForKey:@"MOBILE"]); 

    } 

    [fetchRequest release]; 
    return cell; 

} 
+0

代碼崩潰的代碼行。你有沒有堆棧跟蹤? – TechZen

回答

0

正如我看你有沒有錯的,如果語句的位置:

    if((clientName.text) || (clientAccount.text) || (clientMobile.text) != NULL)

看起來應該像這樣的(如果我沒有記錯的話):

if((clientName.text != NULL) && (clientAccount.text != NULL) && (clientMobile.text != NULL))

+0

仍然給我的錯誤,我試圖改變它一下,但由於某種原因,我即將開始等待圍欄錯誤太... ....廢話 –

+0

什麼行失敗?在我提出修改後,您是否刪除了所有應用數據?你應該重置應用程序數據 – Nekto

+0

你想看看應用程序?即時嘗試查看生成的數據在另一個視圖....其實現在給我的圍欄錯誤很多現在:/ –

0

在你的if語句,你正在檢查所有三個UILabel S代表零文本在同時。這意味着,如果其中一個文本中有文本,而另外兩個文本是空的,if條件將返回YES。然後嘗試將此空文本分配給您的自定義對象。

您應該修改您的if語句以分別引用每個字段。因此:

if (clientAccount.text != nil) client.ACCOUNT = clientAccount.text; 
if (clientName.text != nil)  client.NAME = clientName.text; 
if (clientMobile.text != nil) client.MOBILE = clientMobile.text; 

如果這樣不能解決問題,請發佈確切的線路,讓您知道崩潰的位置。

+0

與您的修復,代碼甚至不通過XML解析加載數據!如果你想看看代碼,我會很高興向你發送代碼,它很難粘貼6個類:/ –

+0

好吧,它似乎是在你的問題所在的地方...嘗試設置將屬性設置爲@「」而不是將它們留在'nil'。 – Mundi

+0

另外,我不會導入新記錄並將它們保存在'cellForRowAtIndexPath:'中。這種方法有可能被多次調用。也許這是你遇到麻煩的地方。 – Mundi