2012-10-23 38 views
2

我是iOS編程的新手,我試圖用提取結果填充UIPickerView。我能夠做到。由於有重複,我決定使用下面的代碼來獲取不同的記錄,只有所需的屬性。代碼工作正常,數組array1 & dictlevel1有正確的數據(如下所示)。我無法弄清楚如何將array1置入選取器視圖?任何幫助將非常感激。帶有不同記錄和UIPickerView的NSFetchRequest

NSError *error; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Factors" inManagedObjectContext:managedObjectContext]; 

    [fetchRequest setEntity:entity]; 
    [fetchRequest setResultType:NSDictionaryResultType]; 
    [fetchRequest setReturnsDistinctResults:YES]; 
    [fetchRequest setPropertiesToFetch:@[@"level1"]]; 

    self.title = @"Factors"; 
    array1 = [[NSArray alloc] init]; 
    array1 = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
    NSDictionary *dictlevel1 = [array1 dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"level1"]]; 

    NSLog(@"%@", array1[1]); 
    NSLog(@"%@", [dictlevel1 dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"level1"]]); 

這裏是NSLog輸出:

2012-10-23 14:55:47.774 CoreData2[1477:c07] (
     { 
     level1 = "External Combustion Boilers"; 
    }, 
     { 
     level1 = "Internal Combustion Engines"; 
    }, 
     { 
     level1 = "Industrial Processes"; 
    }, 
     { 
     level1 = "Petroleum and Solvent Evaporation"; 
    }, 
     { 
     level1 = "Waste Disposal"; 
    }, 
     { 
     level1 = "Stationary Source Fuel Combustion"; 
    }, 
     { 
     level1 = "Miscellaneous Area Sources"; 
    }, 
     { 
     level1 = "Mobile Sources"; 
    }, 
     { 
     level1 = "Solvent Utilization"; 
    }, 
     { 
     level1 = "Storage and Transport"; 
    }, 
     { 
     level1 = "Waste Disposal, Treatment, and Recovery"; 
    }, 
     { 
     level1 = "Natural Sources"; 
    } 
) 

2012-10-23 14:55:47.775 CoreData2[1477:c07] { 
    level1 =  (
     "External Combustion Boilers", 
     "Internal Combustion Engines", 
     "Industrial Processes", 
     "Petroleum and Solvent Evaporation", 
     "Waste Disposal", 
     "Stationary Source Fuel Combustion", 
     "Miscellaneous Area Sources", 
     "Mobile Sources", 
     "Solvent Utilization", 
     "Storage and Transport", 
     "Waste Disposal, Treatment, and Recovery", 
     "Natural Sources" 
    ); 
} 
+0

快速代碼註釋:您不需要此初始化行:'array1 = [[NSArray alloc] init];'。你將從'executeFetchRequest:error:'返回一個NSArray實例。如果你沒有使用ARC,你也在泄漏該初始化數組。 –

+0

感謝您的提示。我會在我的代碼中改變它。 – Sriki

回答

0

就像一個UITableView,你必須處理UIPickerViewDataSourceUIPickerViewDelegate協議的方法,其中提供選擇器與它的數據。有關詳細信息,請參閱鏈接的文檔。

此外,here's a beginner's tutorialUIPickerView

+0

我用過那個。 UIPickerView正常工作正常。我的麻煩出現了,因爲數據存儲中存在重複項,所以我只想獲取唯一值。所以,我使用'NSDictionaryResultType'並只提取我需要的列。返回的結果是不同的(Dictionary type?),我不能在UIPickerView方法中使用它。 – Sriki

0

我會建議使用這樣的代碼片段,以獲得在結果字典給定的鍵不同的結果(@distinctUnionOfObjects)(例如endCalYear):

NSArray *distinctYears = [periodsFilteredByDates 
       valueForKeyPath:@"@distinctUnionOfObjects.endCalYear"]; 

pickerView:numberOfRowsInComponent:然後你可以返回distinctYears.countpickerView:titleForRow:forComponent:的行數,你可以使用這樣的代碼片段爲每個標題返回一個字符串:

NSNumber *endCalYear = distinctResults[row]; 
NSString *rowTitle = [NSString stringWithFormat:@"%@",endCalYear]; 
return rowTitle;