{
  "version": "https://jsonfeed.org/version/1", 
  "title": "Objective-C", 
  "description": "Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.", 
  "home_page_url": "https://www.v2ex.com/go/objc", 
  "feed_url": "https://www.v2ex.com/feed/objc.json", 
  "items": [
    {
      "author": {
        "url": "https://www.v2ex.com/member/abujj", 
        "name": "abujj", 
        "avatar": "https://cdn.v2ex.com/gravatar/954a0c519261d43c7aef7de0f18f0da0?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/869672", 
      "title": "oc Swift \u8c03\u7528\u4e0d\u540c macos \u7248\u672c\u7684 \u540c\u4e00 header \u7684\u63a5\u53e3.", 
      "id": "https://www.v2ex.com/t/869672", 
      "date_published": "2022-07-30T10:44:10+00:00", 
      "content_html": "<p>\u4f8b\u5982, \u6211\u5982\u679c\u8c03\u7528\u7cfb\u7edf api, \u6bd4\u5982 xxx \u91cc\u9762\u7684,  xxx.header</p>\n<p>\u6bd5\u7adf macos \u591a\u4e2a\u7248\u672c,\u6bcf\u4e2a\u7248\u672c xxx.header \u91cc\u9762\u7684\u65b9\u6cd5\u7b49 \u90fd\u6709\u4e9b\u51fa\u5165, \u6709\u65b0\u7684,\u4e5f\u6709\u88ab\u5220\u9664\u7684\u65b9\u6cd5.</p>\n<p>\u8fd9\u65f6\u5019, oc \u548b\u8c03\u7528\u5462?</p>\n<p>\u628a\u4e0d\u540c\u65f6\u671f\u7684 xxx.header \u5408\u5e76\u6210\u4e00\u4e2a\u5927\u800c\u5168\u7684 xxx.header \u8c03\u7528?</p>\n<p>\u8fd8\u662f\u6709\u5565\u5176\u4ed6\u597d\u529e\u6cd5?</p>\n<p>\u641c\u4e86\u4e00\u5708,\u6ca1\u641c\u5230. </p>\n<p>\u5927\u795e\u4eec\u6c42\u6307\u70b9\u800c\u5df2..</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/axdz", 
        "name": "axdz", 
        "avatar": "https://cdn.v2ex.com/gravatar/4cc385c6f9d12c6880f75e41e88f8d32?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/636134", 
      "title": "collectionview \u63d2\u5165\u6570\u636e\u5d29\u6e83", 
      "id": "https://www.v2ex.com/t/636134", 
      "date_published": "2020-01-08T06:07:43+00:00", 
      "content_html": "<p>collectionview \u63d2\u5165\u6570\u636e\u5d29\u6e83\u4e86\uff0c\u4ee3\u7801\u5982\u4e0b</p>\n<p>let selectIndex = self.photoData.seletedAssetArray.index(of: self.previewPhotoArray[currentIndex]) if selectIndex != nil{ self.rightButton.asyncSetImage(UIImage.zyCreateImageWithView(view: ZYPhotoNavigationViewController.zyGetSelectNuberView(index: \"(selectIndex! + 1)\")), for: .selected) }</p>\n<pre><code>    if selectIndex != nil{\n        if self.rightButton.isSelected == false {\n            let indexPath = IndexPath.init(row: selectIndex!, section: 0)\n            self.photoData.seletedAssetArray.remove(at: self.photoData.seletedAssetArray.index(of: self.previewPhotoArray[currentIndex])!)\n            thumbnailCollectionView.deleteItems(at: [indexPath])\n        }else{\n            let indexPath = IndexPath.init(row: selectIndex!, section: 0)\n            thumbnailCollectionView.numberOfItems(inSection: 0)\n            thumbnailCollectionView.insertItems(at: [indexPath])\n            thumbnailCollectionView.reloadItems(at: [indexPath])\n            thumbnailCollectionViewCellToggeleSelect(indexPath: indexPath)\n        }\n    }\n</code></pre>\n<p>\u62a5\u9519\u4fe1\u606f\uff1a 'Invalid update: invalid number of items in section 0. The number of items contained in an existing section after the update (1) must be equal to the number of items contained in that section before the update (1), plus or minus the number of items inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).'</p>\n<p>\u7f51\u4e0a\u67e5\u4e86\u4e00\u4e0b\uff0c<a href=\"https://stackoverflow.com/questions/19199985/invalid-update-invalid-number-of-items-on-uicollectionview\uff0c\u7528\u4e86\u7b2c\u4e8c\u4e2a\u9ad8\u7968\u7b54\u6848\uff0c\u4f46\u6ca1\u6709\u7528\u3002\" rel=\"nofollow\">https://stackoverflow.com/questions/19199985/invalid-update-invalid-number-of-items-on-uicollectionview\uff0c\u7528\u4e86\u7b2c\u4e8c\u4e2a\u9ad8\u7968\u7b54\u6848\uff0c\u4f46\u6ca1\u6709\u7528\u3002</a> \u7b2c\u4e00\u4e2a\u9ad8\u7968\u7b54\u6848\u6ca1\u770b\u61c2\uff0c\u5927\u795e\u6307\u70b9\u4e00\u4e0b\uff0c\u4e0d\u77e5\u9053\u6709\u6ca1\u6709\u5176\u5b83\u65b9\u6cd5</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/gaocc", 
        "name": "gaocc", 
        "avatar": "https://cdn.v2ex.com/avatar/4d93/53f9/295830_large.png?m=1712108904"
      }, 
      "url": "https://www.v2ex.com/t/629730", 
      "date_modified": "2019-12-18T01:37:47+00:00", 
      "content_html": "<p>\u8ba1\u7b97\u673a\u7cfb\u7684\uff0cjava \u5165\u95e8\uff0c\u7136\u540e\u5947\u5947\u602a\u602a\u7684\u8fc7\u7a0b\u4e2d\u53d8\u6210\u4e86\u5168\u6808\uff0c\u6700\u8fd1\u7528 vue \u5f00\u53d1\u524d\u7aef\uff0c\u56e0\u5ba2\u6237\u8981\u6c42\u4e34\u65f6\u5199\u8fc7\u4e00\u6bb5\u65f6\u95f4 react\uff0c\u73b0\u5728 iso \u53ea\u6709\u4e00\u4e2a\u540c\u4e8b\uff0c\u8981\u66ff\u8865\u4e0a\uff0c\u514d\u5f97\u540c\u4e8b\u4e00\u8bf7\u5047\u5c31\u201c\u5355\u70b9\u6545\u969c\u201d\u3002\u6839\u636e app \u9879\u76ee\u4ee3\u7801\u770b\u4e86\u4e00\u5468\uff0c\u5b66\u4e86\u57fa\u672c\u8bed\u6cd5\uff0c\u548c\u9879\u76ee\u4e2d\u7684\u5404\u79cd\u8c03\u7528\u903b\u8f91\uff0c\u4f46\u8fd8\u662f\u7591\u60d1\u5f88\u591a\uff0c\u60f3\u6765\u672c\u4e66\u7cfb\u7edf\u8fc7\u4e00\u4e0b\u3002</p>\n<p>\u6c42\u63a8\u8350\uff0c\u611f\u8c22\uff01</p>\n", 
      "date_published": "2019-12-17T02:59:50+00:00", 
      "title": "\u7b97\u5e94\u6025\uff0c objective-c \u6709\u4ec0\u4e48\u4e66\u63a8\u8350\u5417\uff1f", 
      "id": "https://www.v2ex.com/t/629730"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/xingheng", 
        "name": "xingheng", 
        "avatar": "https://cdn.v2ex.com/avatar/6385/db53/128394_large.png?m=1755740242"
      }, 
      "url": "https://www.v2ex.com/t/617185", 
      "date_modified": "2019-12-15T02:59:49+00:00", 
      "content_html": "<p>\u5728\u4e00\u4e2a\u9762\u8bd5\u88ab\u95ee\u5230\u4e00\u4e2a\u95ee\u9898\uff1a\u5728\u4e00\u4e2a\u6838\u5fc3\u5165\u53e3\u51fd\u6570\u5904\u7edf\u8ba1\u6bcf\u4e00\u4e2a\u8c03\u7528\u65b9\u7684\u8c03\u7528\u6b21\u6570\uff0c\u5165\u53e3\u51fd\u6570\u77e5\u9053\u6bcf\u4e00\u4e2a\u8c03\u7528\u65b9\u7684\u51fd\u6570\u540d(NSString *)\uff0c\u95ee\u9898\u662f\u8981\u600e\u4e48\u7edf\u8ba1\u3002</p>\n<p>\u6211\u56de\u7b54\u6784\u5efa\u4e00\u4e2a NSMutableDictionary&lt;NSString *, NSNumber *&gt;\u7684 static \u5bf9\u8c61\u5e94\u8be5\u5c31\u53ef\u4ee5\u89e3\u51b3\u95ee\u9898\u4e86\uff0c\u7528 dispatch_once \u4fdd\u8bc1\u521d\u59cb\u5316\u7684\u7ebf\u7a0b\u5b89\u5168\u3002\u4f46\u662f\u88ab\u8ffd\u95ee\u8fd9\u6837\u7684\u8bdd NSMutableDictionary \u7684\u5185\u5b58\u4f1a\u6491\u7206\uff0c\u8c03\u7528\u91cf\u4f1a\u975e\u5e38\u5927\uff0c\u600e\u4e48\u4f18\u5316\uff1f</p>\n<p>\u6211\u6ca1\u7b54\u4e0a\u6765\uff0c\u4e8b\u540e\u4e5f\u6ca1\u60f3\u660e\u767d\u3002\u5185\u5b58\u589e\u5927\u5e94\u8be5\u662f NSString \u7684\u539f\u56e0\uff0cNSNumber \u6bd5\u7adf\u53ea\u662f\u503c\u7684\u53d8\u5316\uff0c\u80fd\u5360\u591a\u5c11\u5185\u5b58\u3002NSMutableDictionary \u786e\u5b9e\u4f1a\u5bf9 key \u8fdb\u884c copy\uff0c\u6211\u5728\u60f3\u4ec0\u4e48\u91cf\u7ea7\u7684 NSString \u4f1a\u6491\u7206\u5185\u5b58\u3002</p>\n<p>\u6709\u60f3\u6cd5\uff1f</p>\n", 
      "date_published": "2019-11-07T05:45:54+00:00", 
      "title": "iOS/Objective-C - NSMutableDictionary \u6491\u7206\u4e86\u5185\u5b58\uff1f", 
      "id": "https://www.v2ex.com/t/617185"
    }
  ]
}