मेरे पास 10.8.2 पर एक्सकोड के नवीनतम संस्करण में इंटरफ़ेस बिल्डर के माध्यम से तालिका दृश्य के NSTableCellView के सेटअप के साथ एक दृश्य-आधारित NSTableView है।पुनः लोड करने पर एनएसटीबल व्यू के साथ असंतोषजनक बाधाएं
जब मैं NSTableView पर -reloadData कहते हैं, इसके साथ दुर्घटनाओं:
Unable to simultaneously satisfy constraints:
(
"<NSAutoresizingMaskLayoutConstraint:0x105cb8bf0 h=--& v=--& V:[NSTableRowView:0x105ca7020(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>",
"<NSAutoresizingMaskLayoutConstraint:0x1058d9770 h=--& v=-&- V:|-(1)-[GroupTableRowView] (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>"
)
Will attempt to recover by breaking constraint
<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>
मैं उनकी कमी के रूप में शामिल किसी भी दृश्य NSTableView द्वारा प्रबंधित किया जाता पर स्वत: आकार बदलने मुखौटा अनुवाद बंद नहीं कर सकते। यह स्पष्ट है कि बाधाएं विरोधाभासी हैं क्योंकि NSTableRowView में संभवतः 0 ऊंचाई नहीं हो सकती है जबकि GroupTableRowView पर अन्य दो बाधाओं को संतुष्ट करता है जो पर्यवेक्षण (पंक्ति दृश्य?) के बीच अनिवार्य पैडिंग निर्दिष्ट करते हैं। मुझे यकीन नहीं है कि इसे कैसे हल किया जाए, किसी भी अंतर्दृष्टि की सराहना की जाएगी। धन्यवाद!
अद्यतन: मुझे एक कामकाज मिला। मुद्दा यह है कि किसी कारण से NSTableRowView को तालिका दृश्य पर -reloadData को कॉल करते समय {0, 0}
का फ्रेम आकार भेजा जा रहा था। मैं NSTableRowView उपclass में -setFrameSize:
को ओवरराइड करता हूं और आकार {0,0}
नहीं होने पर केवल प्रतिक्रियाकर्ता श्रृंखला को संदेश पास करता है।
- (void)setFrameSize:(NSSize)newSize
{
if (!NSEqualSizes(newSize, NSZeroSize))
[super setFrameSize:newSize];
}
उपवर्ग का उपयोग करने के लिए कस्टम उपवर्ग का एक उदाहरण वापस जाने के लिए NSTableViewDelegate के -tableView:rowViewForRow: विधि को लागू।
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
id rowView = [[GroupTableRowView alloc] init];
// configure any custom properties
return rowView;
}
तालिका दृश्य आईबी में पूरी तरह से बनाया गया है, तो आप बस एक नया NSView अपने तालिका दृश्य में खींचें और इसे अपने NSTableRowView उपवर्ग के लिए कस्टम वर्ग है की स्थापना की और बदल सकते हैं यह NSTableViewRowViewKey
टक्कर। दृश्य आधारित तालिका दृश्यों का उपयोग करते समय मैंने एक ही समस्या में भाग लिया है। क्या आपने अपनी समस्या पर कोई प्रगति की है? –
मैंने अपने प्रश्न को एक समाधान के साथ अपडेट किया। मैं अभी भी देख रहा हूं कि NSTableCellView को {{0,0} 'क्यों भेजा जा रहा है, लेकिन मैं इसे ऐप्पल को बग रिपोर्ट सबमिट करने के लिए डेमो ऐप में पुन: उत्पन्न नहीं कर सकता। – Andrew
@ एंड्रयू मुझे लगता है कि यह वास्तव में समाधान है, इसके लिए धन्यवाद! – NSAddict