From e9016e28aa7df8870948309519cb56761e1fe808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=AF=20=E6=92=92?= <420391244@qq.com> Date: Thu, 21 May 2015 18:57:32 +0800 Subject: [PATCH] first init --- ABCDEF_city.plist | 42 + AFNetworking-master/.cocoadocs.yml | 7 + AFNetworking-master/.gitignore | 21 + AFNetworking-master/.travis.yml | 7 + AFNetworking-master/AFNetworking.podspec | 60 + .../AFNetworking/AFHTTPRequestOperation.h | 66 + .../AFNetworking/AFHTTPRequestOperation.m | 206 + .../AFHTTPRequestOperationManager.h | 323 ++ .../AFHTTPRequestOperationManager.m | 284 + .../AFNetworking/AFHTTPSessionManager.h | 247 + .../AFNetworking/AFHTTPSessionManager.m | 321 ++ .../AFNetworkReachabilityManager.h | 200 + .../AFNetworkReachabilityManager.m | 259 + .../AFNetworking/AFNetworking.h | 44 + .../AFNetworking/AFSecurityPolicy.h | 142 + .../AFNetworking/AFSecurityPolicy.m | 308 ++ .../AFNetworking/AFURLConnectionOperation.h | 343 ++ .../AFNetworking/AFURLConnectionOperation.m | 788 +++ .../AFNetworking/AFURLRequestSerialization.h | 467 ++ .../AFNetworking/AFURLRequestSerialization.m | 1384 +++++ .../AFNetworking/AFURLResponseSerialization.h | 309 ++ .../AFNetworking/AFURLResponseSerialization.m | 797 +++ .../AFNetworking/AFURLSessionManager.h | 546 ++ .../AFNetworking/AFURLSessionManager.m | 1103 ++++ AFNetworking-master/CHANGES | 1673 ++++++ AFNetworking-master/CONTRIBUTING.md | 91 + .../Example/AFNetworking Example.entitlements | 12 + .../project.pbxproj | 403 ++ .../project.pbxproj | 637 +++ AFNetworking-master/Example/AppDelegate.h | 44 + AFNetworking-master/Example/AppDelegate.m | 91 + .../Example/Classes/AFAppDotNetAPIClient.h | 30 + .../Example/Classes/AFAppDotNetAPIClient.m | 40 + .../GlobalTimelineViewController.h | 27 + .../GlobalTimelineViewController.m | 105 + .../Example/Classes/Models/Post.h | 38 + .../Example/Classes/Models/Post.m | 65 + .../Example/Classes/Models/User.h | 39 + .../Example/Classes/Models/User.m | 100 + .../Example/Classes/Views/PostTableViewCell.h | 33 + .../Example/Classes/Views/PostTableViewCell.m | 82 + .../Example/Default-568h@2x.png | Bin 0 -> 18594 bytes AFNetworking-master/Example/Default.png | Bin 0 -> 942 bytes AFNetworking-master/Example/Default@2x.png | Bin 0 -> 5104 bytes AFNetworking-master/Example/Icon.png | Bin 0 -> 6547 bytes AFNetworking-master/Example/Icon@2x.png | Bin 0 -> 10055 bytes .../Images/profile-image-placeholder.png | Bin 0 -> 1098 bytes .../Images/profile-image-placeholder@2x.png | Bin 0 -> 2767 bytes AFNetworking-master/Example/Mac-Info.plist | 34 + AFNetworking-master/Example/MainMenu.xib | 1894 +++++++ AFNetworking-master/Example/Prefix.pch | 21 + AFNetworking-master/Example/adn.cer | Bin 0 -> 1321 bytes AFNetworking-master/Example/digicert_ca_3.cer | Bin 0 -> 1628 bytes .../Example/en.lproj/MainMenu.xib | 4587 +++++++++++++++++ AFNetworking-master/Example/iOS-Info.plist | 60 + AFNetworking-master/Example/main.m | 37 + AFNetworking-master/Example/root_ca.cer | Bin 0 -> 969 bytes AFNetworking-master/LICENSE | 19 + AFNetworking-master/README.md | 385 ++ AFNetworking-master/Rakefile | 50 + .../project.pbxproj | 779 +++ .../Tests/AFNetworking-Prefix.pch | 16 + .../Tests/AFNetworkingTests-Info.plist | 22 + .../Tests/OS X Tests/OS X Tests-Info.plist | 22 + .../Tests/OS X Tests/OS X Tests-Prefix.pch | 9 + .../OS X Tests/en.lproj/InfoPlist.strings | 2 + AFNetworking-master/Tests/Podfile | 23 + .../ADN.net/ADNNetServerTrustChain/adn_0.cer | Bin 0 -> 1321 bytes .../ADN.net/ADNNetServerTrustChain/adn_1.cer | Bin 0 -> 1628 bytes .../ADN.net/ADNNetServerTrustChain/adn_2.cer | Bin 0 -> 969 bytes .../HTTPBin.org/AddTrust_External_CA_Root.cer | Bin 0 -> 1082 bytes .../COMODO_RSA_Certification_Authority.cer | Bin 0 -> 1400 bytes ...RSA_Domain_Validation_Secure_Server_CA.cer | Bin 0 -> 1548 bytes .../HTTPBinOrgServerTrustChain/httpbin_0.cer | Bin 0 -> 1364 bytes .../HTTPBinOrgServerTrustChain/httpbin_1.cer | Bin 0 -> 1548 bytes .../HTTPBinOrgServerTrustChain/httpbin_2.cer | Bin 0 -> 1400 bytes .../HTTPBinOrgServerTrustChain/httpbin_3.cer | Bin 0 -> 1082 bytes .../HTTPBin.org/httpbinorg_01162016.cer | Bin 0 -> 1364 bytes .../Tests/Resources/SelfSigned/AltName.cer | Bin 0 -> 766 bytes .../Tests/Resources/SelfSigned/NoDomains.cer | Bin 0 -> 747 bytes .../Tests/Resources/SelfSigned/foobar.com.cer | Bin 0 -> 747 bytes .../Tests/Schemes/OS X Tests.xcscheme | 83 + .../Tests/Schemes/iOS Tests.xcscheme | 83 + .../Tests/Tests/1.0 Tests/AFHTTPClientTests.m | 335 ++ .../1.0 Tests/AFHTTPRequestOperationTests.m | 240 + .../1.0 Tests/AFImageRequestOperationTests.m | 155 + .../1.0 Tests/AFJSONRequestOperationTests.m | 98 + .../Tests/Tests/1.0 Tests/AFMockURLProtocol.h | 37 + .../Tests/Tests/1.0 Tests/AFMockURLProtocol.m | 106 + .../Tests/Tests/1.0 Tests/AFNetworkingTests.h | 33 + .../Tests/Tests/1.0 Tests/AFNetworkingTests.m | 35 + .../1.0 Tests/AFURLConnectionOperationTests.m | 304 ++ .../Tests/Tests/AFHTTPRequestOperationTests.m | 458 ++ .../Tests/AFHTTPRequestSerializationTests.m | 151 + .../Tests/AFHTTPResponseSerializationTests.m | 67 + .../Tests/Tests/AFHTTPSessionManagerTests.m | 144 + .../Tests/Tests/AFJSONSerializationTests.m | 136 + .../Tests/AFNetworkActivityManagerTests.m | 107 + .../Tests/AFNetworkReachabilityManagerTests.m | 128 + .../AFPropertyListResponseSerializerTests.m | 48 + .../Tests/Tests/AFSecurityPolicyTests.m | 576 +++ AFNetworking-master/Tests/Tests/AFTestCase.h | 34 + AFNetworking-master/Tests/Tests/AFTestCase.m | 44 + .../Tests/Tests/AFURLSessionManagerTests.m | 81 + .../iOS Tests/en.lproj/InfoPlist.strings | 2 + .../Tests/iOS Tests/iOS Tests-Info.plist | 22 + .../Tests/iOS Tests/iOS Tests-Prefix.pch | 10 + .../AFNetworkActivityIndicatorManager.h | 75 + .../AFNetworkActivityIndicatorManager.m | 172 + .../UIActivityIndicatorView+AFNetworking.h | 63 + .../UIActivityIndicatorView+AFNetworking.m | 96 + .../UIAlertView+AFNetworking.h | 95 + .../UIAlertView+AFNetworking.m | 141 + .../UIButton+AFNetworking.h | 180 + .../UIButton+AFNetworking.m | 293 ++ .../UIImageView+AFNetworking.h | 142 + .../UIImageView+AFNetworking.m | 215 + .../UIKit+AFNetworking/UIKit+AFNetworking.h | 38 + .../UIProgressView+AFNetworking.h | 87 + .../UIProgressView+AFNetworking.m | 182 + .../UIRefreshControl+AFNetworking.h | 64 + .../UIRefreshControl+AFNetworking.m | 93 + .../UIWebView+AFNetworking.h | 82 + .../UIWebView+AFNetworking.m | 159 + AdDataModel.h | 24 + AdDataModel.m | 47 + AdDataPlist.plist | 18 + AdScrollView.h | 40 + AdScrollView.m | 173 + ArtistsCell.h | 16 + ArtistsCell.m | 23 + ArtistsCell.xib | 41 + ArtistsViewController.h | 13 + ArtistsViewController.m | 77 + ArtistsViewController.xib | 25 + CNPPopupController.h | 126 + CNPPopupController.m | 680 +++ .../DAContextMenuCell.h | 45 + .../DAContextMenuCell.m | 269 + .../DAContextMenuTableViewController.h | 16 + .../DAContextMenuTableViewController.m | 142 + .../DAOverlayView.h | 25 + .../DAOverlayView.m | 18 + DetailViewController.h | 13 + DetailViewController.m | 37 + DetailViewController.xib | 37 + DownSheet/DownSheet.xcodeproj/project.pbxproj | 766 +++ .../contents.xcworkspacedata | 7 + .../xcschemes/DownSheet.xcscheme | 110 + .../xcschemes/xcschememanagement.plist | 27 + .../xcdebugger/Breakpoints_v2.xcbkptlist | 183 + .../xcschemes/DownSheet.xcscheme | 112 + .../xcschemes/xcschememanagement.plist | 27 + .../xcschemes/DownSheet.xcscheme | 96 + .../xcschemes/xcschememanagement.plist | 27 + DownSheet/DownSheet/AppDelegate.h | 19 + DownSheet/DownSheet/AppDelegate.m | 56 + DownSheet/DownSheet/Classes/DownSheet.h | 55 + DownSheet/DownSheet/Classes/DownSheet.m | 385 ++ DownSheet/DownSheet/Classes/DownSheetCell.h | 28 + DownSheet/DownSheet/Classes/DownSheetCell.m | 58 + DownSheet/DownSheet/Classes/job_first.plist | 50 + .../DownSheet/Classes/job_second(0).plist | 10 + .../DownSheet/Classes/job_second(1).plist | 22 + .../DownSheet/Classes/job_second(10).plist | 18 + .../DownSheet/Classes/job_second(2).plist | 22 + .../DownSheet/Classes/job_second(3).plist | 22 + .../DownSheet/Classes/job_second(4).plist | 26 + .../DownSheet/Classes/job_second(5).plist | 22 + .../DownSheet/Classes/job_second(6).plist | 34 + .../DownSheet/Classes/job_second(7).plist | 22 + .../DownSheet/Classes/job_second(8).plist | 22 + .../DownSheet/Classes/job_second(9).plist | 14 + .../DownSheet/Classes/job_third(0).plist | 10 + .../DownSheet/Classes/job_third(1).plist | 54 + .../DownSheet/Classes/job_third(2).plist | 18 + DownSheet/DownSheet/DownSheet-Info.plist | 36 + DownSheet/DownSheet/DownSheet-Prefix.pch | 16 + .../AppIcon.appiconset/Contents.json | 23 + .../LaunchImage.launchimage/Contents.json | 23 + DownSheet/DownSheet/Receive_email.h | 27 + DownSheet/DownSheet/Receive_email.m | 144 + DownSheet/DownSheet/Resouce/icon_add@2x.png | Bin 0 -> 1275 bytes .../DownSheet/Resouce/icon_add_hover@2x.png | Bin 0 -> 1263 bytes DownSheet/DownSheet/Resouce/icon_album@2x.png | Bin 0 -> 1907 bytes .../DownSheet/Resouce/icon_album_hover@2x.png | Bin 0 -> 1718 bytes DownSheet/DownSheet/Resouce/icon_buy@2x.png | Bin 0 -> 1257 bytes .../DownSheet/Resouce/icon_buy_hover@2x.png | Bin 0 -> 1234 bytes .../DownSheet/Resouce/icon_computer@2x.png | Bin 0 -> 1382 bytes .../Resouce/icon_computer_hover@2x.png | Bin 0 -> 1376 bytes DownSheet/DownSheet/Resouce/icon_del@2x.png | Bin 0 -> 1711 bytes .../DownSheet/Resouce/icon_del_hover@2x.png | Bin 0 -> 1708 bytes DownSheet/DownSheet/Resouce/icon_down@2x.png | Bin 0 -> 1442 bytes .../DownSheet/Resouce/icon_down_hover@2x.png | Bin 0 -> 1381 bytes DownSheet/DownSheet/ViewController.h | 19 + DownSheet/DownSheet/ViewController.m | 76 + DownSheet/DownSheet/Work_Day.h | 32 + DownSheet/DownSheet/Work_Day.m | 184 + DownSheet/DownSheet/email.h | 24 + DownSheet/DownSheet/email.m | 48 + .../DownSheet/en.lproj/InfoPlist.strings | 2 + DownSheet/DownSheet/lowest_study.plist | 26 + DownSheet/DownSheet/main.m | 22 + DownSheet/DownSheet/salary_range.plist | 30 + DownSheet/DownSheet/school_exp.plist | 26 + DownSheet/DownSheet/send_cycle.plist | 14 + DownSheet/DownSheet/time_window.h | 39 + DownSheet/DownSheet/time_window.m | 182 + DownSheet/DownSheet/work_cell.h | 26 + DownSheet/DownSheet/work_cell.m | 54 + DownSheet/DownSheet/work_days.plist | 22 + DownSheet/DownSheet/work_time.plist | 22 + DownSheet/DownSheet/workday.h | 31 + DownSheet/DownSheet/workday.m | 133 + .../DownSheetTests/DownSheetTests-Info.plist | 22 + DownSheet/DownSheetTests/DownSheetTests.m | 38 + .../DownSheetTests/en.lproj/InfoPlist.strings | 2 + EAIntroPage.h | 32 + EAIntroPage.m | 34 + EAIntroView.h | 43 + EAIntroView.m | 394 ++ GHIJ_city.plist | 38 + KLMN_city.plist | 30 + NSData+SDDataCache.h | 17 + NSData+SDDataCache.m | 69 + OPQR_city.plist | 14 + PlayListCell.h | 16 + PlayListCell.m | 23 + PlayListCell.xib | 37 + PlayListTableViewController.h | 13 + PlayListTableViewController.m | 81 + PlayListTableViewController.xib | 24 + README.md | 1 + SDCollectionViewCell.h | 37 + SDCollectionViewCell.m | 96 + SDCycleScrollView.h | 60 + SDCycleScrollView.m | 331 ++ SRMonthPicker.h | 110 + SRMonthPicker.m | 313 ++ STUV_city.plist | 38 + SampleViewController.h | 13 + SampleViewController.m | 30 + SampleViewController.xib | 37 + ShiXiSeng_Main.xcodeproj/project.pbxproj | 1340 ++++- .../xcdebugger/Breakpoints_v2.xcbkptlist | 417 ++ ShiXiSeng_Main/>=.png | Bin 0 -> 3031 bytes ShiXiSeng_Main/About.h | 13 + ShiXiSeng_Main/About.m | 37 + ShiXiSeng_Main/Accountset.h | 13 + ShiXiSeng_Main/Accountset.m | 37 + ShiXiSeng_Main/AllMsg.h | 13 + ShiXiSeng_Main/AllMsg.m | 119 + ShiXiSeng_Main/AllMsg.xib | 25 + ShiXiSeng_Main/AppDelegate.m | 16 +- ShiXiSeng_Main/Base.lproj/LaunchScreen.xib | 41 +- ShiXiSeng_Main/Base.lproj/Main.storyboard | 25 - ShiXiSeng_Main/ChanceViewController.h | 38 + ShiXiSeng_Main/ChanceViewController.m | 344 ++ ShiXiSeng_Main/Classes/DownSheet.h | 55 + ShiXiSeng_Main/Classes/DownSheet.m | 378 ++ ShiXiSeng_Main/Classes/DownSheetCell.h | 28 + ShiXiSeng_Main/Classes/DownSheetCell.m | 58 + ShiXiSeng_Main/Classes/job_first.plist | 50 + ShiXiSeng_Main/Classes/job_second(0).plist | 10 + ShiXiSeng_Main/Classes/job_second(1).plist | 22 + ShiXiSeng_Main/Classes/job_second(10).plist | 18 + ShiXiSeng_Main/Classes/job_second(2).plist | 22 + ShiXiSeng_Main/Classes/job_second(3).plist | 22 + ShiXiSeng_Main/Classes/job_second(4).plist | 26 + ShiXiSeng_Main/Classes/job_second(5).plist | 22 + ShiXiSeng_Main/Classes/job_second(6).plist | 34 + ShiXiSeng_Main/Classes/job_second(7).plist | 22 + ShiXiSeng_Main/Classes/job_second(8).plist | 22 + ShiXiSeng_Main/Classes/job_second(9).plist | 14 + ShiXiSeng_Main/Classes/job_third(0).plist | 10 + ShiXiSeng_Main/Classes/job_third(1).plist | 54 + ShiXiSeng_Main/Classes/job_third(2).plist | 18 + ShiXiSeng_Main/CompanyInfoa.h | 13 + ShiXiSeng_Main/CompanyInfoa.m | 37 + ShiXiSeng_Main/CompanyPosition.h | 18 + ShiXiSeng_Main/CompanyPosition.m | 102 + ShiXiSeng_Main/CustomToolbar.h | 13 + ShiXiSeng_Main/CustomToolbar.m | 23 + ShiXiSeng_Main/Delegate.h | 18 + ShiXiSeng_Main/Education_exp.h | 24 + ShiXiSeng_Main/Education_exp.m | 97 + ShiXiSeng_Main/ExitViewController.h | 17 + ShiXiSeng_Main/ExitViewController.m | 58 + ShiXiSeng_Main/FeedBackViewController.h | 16 + ShiXiSeng_Main/FeedBackViewController.m | 41 + ShiXiSeng_Main/Fill_Record.h | 17 + ShiXiSeng_Main/Fill_Record.m | 333 ++ ShiXiSeng_Main/Fill_Record_Cell.h | 20 + ShiXiSeng_Main/Fill_Record_Cell.m | 29 + ShiXiSeng_Main/FindControllerViewController.h | 13 + ShiXiSeng_Main/FindControllerViewController.m | 78 + ShiXiSeng_Main/FindViewController.h | 15 + ShiXiSeng_Main/FindViewController.m | 108 + ShiXiSeng_Main/FixCom.h | 16 + ShiXiSeng_Main/FixCom.m | 171 + ShiXiSeng_Main/FixCompany.h | 13 + ShiXiSeng_Main/FixCompany.m | 37 + ShiXiSeng_Main/Hope.h | 33 + ShiXiSeng_Main/Hope.m | 151 + .../AppIcon.appiconset/29-1.png | Bin 0 -> 6526 bytes .../Images.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 18729 bytes .../Images.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 8704 bytes .../AppIcon.appiconset/57-1.png | Bin 0 -> 12255 bytes .../Images.xcassets/AppIcon.appiconset/57.png | Bin 0 -> 20340 bytes .../AppIcon.appiconset/60-1.png | Bin 0 -> 22776 bytes .../Images.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 13174 bytes .../AppIcon.appiconset/Contents.json | 52 +- .../Chance/homeICON.imageset/Contents.json | 21 + .../Chance/homeICON.imageset/homeICON.png | Bin 0 -> 3965 bytes .../Chance/website.imageset/Contents.json | 21 + .../Chance/website.imageset/website.png | Bin 0 -> 4843 bytes .../Images.xcassets/Intro/1.imageset/1.png | Bin 0 -> 143003 bytes .../Intro/1.imageset/Contents.json | 21 + .../Images.xcassets/Intro/2.imageset/2.png | Bin 0 -> 3691024 bytes .../Intro/2.imageset/Contents.json | 21 + .../Images.xcassets/Intro/3.imageset/3.png | Bin 0 -> 3691024 bytes .../Intro/3.imageset/Contents.json | 21 + .../LaunchImage.launchimage/Contents.json | 39 + .../delete.imageset/Contents.json | 21 + .../delete.imageset/delete.png | Bin 0 -> 3295 bytes .../pencil.imageset/Contents.json | 21 + .../pencil.imageset/pencil.png | Bin 0 -> 3520 bytes .../Contents.json" | 21 + .../\345\217\221\347\216\260.png" | Bin 0 -> 17247 bytes .../Contents.json" | 21 + .../\346\210\221\347\232\204.png" | Bin 0 -> 17247 bytes .../Contents.json" | 21 + .../\346\234\272\344\274\232.png" | Bin 0 -> 17247 bytes .../Contents.json" | 21 + .../\346\266\210\346\201\257.png" | Bin 0 -> 17247 bytes .../Contents.json" | 21 + ...6\345\256\236\344\271\240\345\203\247.png" | Bin 0 -> 259017 bytes .../Contents.json" | 21 + .../\345\217\221\351\200\201.png" | Bin 0 -> 10932 bytes .../Contents.json" | 21 + ...3\345\206\231\347\256\200\345\216\206.png" | Bin 0 -> 9885 bytes .../add.imageset/Contents.json" | 21 + .../add.imageset/add.png" | Bin 0 -> 3492 bytes .../edit1.imageset/Contents.json" | 21 + .../edit1.imageset/edit1.png" | Bin 0 -> 3357 bytes .../email.imageset/Contents.json" | 21 + .../email.imageset/email.png" | Bin 0 -> 3070 bytes .../phone.imageset/Contents.json" | 21 + .../phone.imageset/phone.png" | Bin 0 -> 3364 bytes .../school.imageset/Contents.json" | 21 + .../school.imageset/school.png" | Bin 0 -> 3428 bytes .../Contents.json" | 21 + ...3\345\206\231\347\256\200\345\216\206.png" | Bin 0 -> 29212 bytes .../Contents.json" | 21 + .../\347\274\226\350\276\221.png" | Bin 0 -> 4084 bytes .../Contents.json" | 21 + .../\345\244\264\345\203\217.png" | Bin 0 -> 163002 bytes .../Contents.json" | 21 + ...3\346\263\250\345\205\254\345\217\270.png" | Bin 0 -> 9885 bytes .../Contents.json" | 21 + ...6\350\227\217\350\201\214\344\275\215.png" | Bin 0 -> 9885 bytes .../Contents.json" | 21 + .../MineBG.png" | Bin 0 -> 233457 bytes .../Contents.json" | 21 + ...5\351\200\222\347\272\252\345\275\225.png" | Bin 0 -> 9885 bytes .../Contents.json" | 21 + ...4\344\275\215\350\256\242\351\230\205.png" | Bin 0 -> 9885 bytes .../Contents.json" | 21 + .../\350\256\276\347\275\256.png" | Bin 0 -> 10932 bytes .../Contents.json" | 21 + ...0\350\275\275\351\241\265\351\235\242.png" | Bin 0 -> 3691024 bytes .../Contents.json" | 21 + ...3\345\275\225\347\225\214\351\235\242.png" | Bin 0 -> 3691024 bytes ShiXiSeng_Main/Info.plist | 20 +- ShiXiSeng_Main/InteMsg.h | 13 + ShiXiSeng_Main/InteMsg.m | 125 + ShiXiSeng_Main/InteMsg.xib | 24 + ShiXiSeng_Main/Job.h | 25 + ShiXiSeng_Main/Job.m | 26 + ShiXiSeng_Main/Job.plist | 102 + ShiXiSeng_Main/Job.xib | 25 + ShiXiSeng_Main/JobCell.h | 22 + ShiXiSeng_Main/JobCell.m | 23 + ShiXiSeng_Main/JobCollect.h | 16 + ShiXiSeng_Main/JobCollect.m | 111 + ShiXiSeng_Main/JobInfoa.h | 13 + ShiXiSeng_Main/JobInfoa.m | 37 + ShiXiSeng_Main/JobTable.h | 15 + ShiXiSeng_Main/JobTable.m | 145 + ShiXiSeng_Main/JobView.h | 15 + ShiXiSeng_Main/JobView.m | 21 + ShiXiSeng_Main/Job_Sub_Cell.h | 44 + ShiXiSeng_Main/Job_Sub_Cell.m | 268 + ShiXiSeng_Main/Job_Subscribe.h | 15 + ShiXiSeng_Main/Job_Subscribe.m | 143 + ShiXiSeng_Main/Jobdetail.h | 13 + ShiXiSeng_Main/Jobdetail.m | 41 + ShiXiSeng_Main/MViewController.h | 15 + ShiXiSeng_Main/MViewController.m | 82 + ShiXiSeng_Main/Main.storyboard | 3776 ++++++++++++++ ShiXiSeng_Main/MessageViewController.h | 13 + ShiXiSeng_Main/MessageViewController.m | 83 + ShiXiSeng_Main/MineTableViewController.h | 15 + ShiXiSeng_Main/MineTableViewController.m | 103 + ShiXiSeng_Main/MsgCell.h | 23 + ShiXiSeng_Main/MsgCell.m | 23 + ShiXiSeng_Main/MsgCell.xib | 58 + ShiXiSeng_Main/MsgDetail.h | 13 + ShiXiSeng_Main/MsgDetail.m | 37 + ShiXiSeng_Main/NewMessage.h | 13 + ShiXiSeng_Main/NewMessage.m | 37 + ShiXiSeng_Main/OneDelegate.m | 40 + ShiXiSeng_Main/PViewController.h | 13 + ShiXiSeng_Main/PViewController.m | 43 + ShiXiSeng_Main/Personinfo.h | 28 + ShiXiSeng_Main/Personinfo.m | 606 +++ ShiXiSeng_Main/PooCodeView.h | 15 + ShiXiSeng_Main/PooCodeView.m | 96 + ShiXiSeng_Main/PrefixHeader.pch | 20 + ShiXiSeng_Main/Project_exp.h | 18 + ShiXiSeng_Main/Project_exp.m | 81 + ShiXiSeng_Main/PwdViewController.h | 16 + ShiXiSeng_Main/PwdViewController.m | 40 + ShiXiSeng_Main/RefuseMsg.h | 15 + ShiXiSeng_Main/RefuseMsg.m | 124 + ShiXiSeng_Main/RefuseMsg.xib | 24 + ShiXiSeng_Main/Register.h | 17 + ShiXiSeng_Main/Register.m | 214 + ShiXiSeng_Main/Rest.h | 13 + ShiXiSeng_Main/Rest.m | 37 + ShiXiSeng_Main/School_exp.h | 17 + ShiXiSeng_Main/School_exp.m | 59 + ShiXiSeng_Main/SignIn.h | 14 + ShiXiSeng_Main/SignIn.m | 326 ++ ShiXiSeng_Main/TESTTableViewController.h | 15 + ShiXiSeng_Main/TESTTableViewController.m | 184 + ShiXiSeng_Main/TestController.h | 13 + ShiXiSeng_Main/TestController.m | 80 + ShiXiSeng_Main/TestViewController.h | 16 + ShiXiSeng_Main/TestViewController.m | 40 + ShiXiSeng_Main/ViewController.h | 3 + ShiXiSeng_Main/Work_Day.h | 38 + ShiXiSeng_Main/Work_Day.m | 217 + ShiXiSeng_Main/com.h | 53 + ShiXiSeng_Main/com.m | 276 + ShiXiSeng_Main/job_sub_content.h | 32 + ShiXiSeng_Main/job_sub_content.m | 94 + ShiXiSeng_Main/jobcollect_cell.h | 43 + ShiXiSeng_Main/jobcollect_cell.m | 251 + ShiXiSeng_Main/lookMsg.h | 13 + ShiXiSeng_Main/lookMsg.m | 124 + ShiXiSeng_Main/lookMsg.xib | 24 + ShiXiSeng_Main/position.h | 18 + ShiXiSeng_Main/position.m | 23 + ShiXiSeng_Main/salary_range.plist | 30 + ShiXiSeng_Main/work_cell.h | 26 + ShiXiSeng_Main/work_cell.m | 54 + ShiXiSeng_Main/work_days.plist | 22 + ShiXiSeng_Main/work_exp.h | 17 + ShiXiSeng_Main/work_exp.m | 83 + ShiXiSeng_Main/work_time.plist | 22 + ShiXiSeng_Main/workday.h | 31 + ShiXiSeng_Main/workday.m | 133 + ...5\347\247\221\345\255\246\351\231\242.png" | Bin 0 -> 6180 bytes "ShiXiSeng_Main/\344\272\254\344\270\234.png" | Bin 0 -> 5105 bytes ...0\345\227\222\346\270\205\345\215\225.png" | Bin 0 -> 5612 bytes "ShiXiSeng_Main/\345\256\232\344\275\215.png" | Bin 0 -> 3098 bytes "ShiXiSeng_Main/\346\227\245\345\216\206.png" | Bin 0 -> 3122 bytes .../\347\210\261\345\245\207\350\211\272.png" | Bin 0 -> 7475 bytes .../\347\231\276\350\257\215\346\226\251.png" | Bin 0 -> 4105 bytes "ShiXiSeng_Main/\350\201\224\346\203\263.png" | Bin 0 -> 3947 bytes TAAbstractDotView.h | 24 + TAAbstractDotView.m | 30 + TAAnimatedDotView.h | 15 + TAAnimatedDotView.m | 88 + TADotView.h | 13 + TADotView.m | 63 + TAPageControl.h | 106 + TAPageControl.m | 364 ++ UIView+SDExtension.h | 22 + UIView+SDExtension.m | 77 + VPImageCropper/VPImageCropperViewController.h | 28 + VPImageCropper/VPImageCropperViewController.m | 287 ++ WXYZ_city.plist | 38 + YSLContainerViewController.h | 35 + YSLContainerViewController.m | 195 + YSLScrollMenuView.h | 37 + YSLScrollMenuView.m | 197 + city/CollectionHeadView.h | 17 + city/CollectionHeadView.m | 38 + city/test.h | 37 + city/test.m | 390 ++ city/testcell.h | 15 + city/testcell.m | 41 + hot_city.plist | 30 + image0.png | Bin 0 -> 156562 bytes image1.png | Bin 0 -> 156562 bytes image2.png | Bin 0 -> 156562 bytes image3.png | Bin 0 -> 156562 bytes industry.h | 39 + industry.m | 219 + industry.plist | 78 + industry_cell.h | 22 + industry_cell.m | 46 + lowest_study.plist | 26 + test.png | Bin 0 -> 2901 bytes "\345\217\221\347\216\260.png" | Bin 0 -> 22069 bytes "\346\210\221\347\232\204.png" | Bin 0 -> 22069 bytes "\346\234\272\344\274\232.png" | Bin 0 -> 22069 bytes "\346\266\210\346\201\257.png" | Bin 0 -> 22069 bytes 510 files changed, 50491 insertions(+), 104 deletions(-) create mode 100644 ABCDEF_city.plist create mode 100755 AFNetworking-master/.cocoadocs.yml create mode 100755 AFNetworking-master/.gitignore create mode 100755 AFNetworking-master/.travis.yml create mode 100755 AFNetworking-master/AFNetworking.podspec create mode 100755 AFNetworking-master/AFNetworking/AFHTTPRequestOperation.h create mode 100755 AFNetworking-master/AFNetworking/AFHTTPRequestOperation.m create mode 100755 AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.h create mode 100755 AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.m create mode 100755 AFNetworking-master/AFNetworking/AFHTTPSessionManager.h create mode 100755 AFNetworking-master/AFNetworking/AFHTTPSessionManager.m create mode 100755 AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.h create mode 100755 AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.m create mode 100755 AFNetworking-master/AFNetworking/AFNetworking.h create mode 100755 AFNetworking-master/AFNetworking/AFSecurityPolicy.h create mode 100755 AFNetworking-master/AFNetworking/AFSecurityPolicy.m create mode 100755 AFNetworking-master/AFNetworking/AFURLConnectionOperation.h create mode 100755 AFNetworking-master/AFNetworking/AFURLConnectionOperation.m create mode 100755 AFNetworking-master/AFNetworking/AFURLRequestSerialization.h create mode 100755 AFNetworking-master/AFNetworking/AFURLRequestSerialization.m create mode 100755 AFNetworking-master/AFNetworking/AFURLResponseSerialization.h create mode 100755 AFNetworking-master/AFNetworking/AFURLResponseSerialization.m create mode 100755 AFNetworking-master/AFNetworking/AFURLSessionManager.h create mode 100755 AFNetworking-master/AFNetworking/AFURLSessionManager.m create mode 100755 AFNetworking-master/CHANGES create mode 100755 AFNetworking-master/CONTRIBUTING.md create mode 100755 AFNetworking-master/Example/AFNetworking Example.entitlements create mode 100755 AFNetworking-master/Example/AFNetworking OS X Example.xcodeproj/project.pbxproj create mode 100755 AFNetworking-master/Example/AFNetworking iOS Example.xcodeproj/project.pbxproj create mode 100755 AFNetworking-master/Example/AppDelegate.h create mode 100755 AFNetworking-master/Example/AppDelegate.m create mode 100755 AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.h create mode 100755 AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.m create mode 100755 AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.h create mode 100755 AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.m create mode 100755 AFNetworking-master/Example/Classes/Models/Post.h create mode 100755 AFNetworking-master/Example/Classes/Models/Post.m create mode 100755 AFNetworking-master/Example/Classes/Models/User.h create mode 100755 AFNetworking-master/Example/Classes/Models/User.m create mode 100755 AFNetworking-master/Example/Classes/Views/PostTableViewCell.h create mode 100755 AFNetworking-master/Example/Classes/Views/PostTableViewCell.m create mode 100755 AFNetworking-master/Example/Default-568h@2x.png create mode 100755 AFNetworking-master/Example/Default.png create mode 100755 AFNetworking-master/Example/Default@2x.png create mode 100755 AFNetworking-master/Example/Icon.png create mode 100755 AFNetworking-master/Example/Icon@2x.png create mode 100755 AFNetworking-master/Example/Images/profile-image-placeholder.png create mode 100755 AFNetworking-master/Example/Images/profile-image-placeholder@2x.png create mode 100755 AFNetworking-master/Example/Mac-Info.plist create mode 100755 AFNetworking-master/Example/MainMenu.xib create mode 100755 AFNetworking-master/Example/Prefix.pch create mode 100755 AFNetworking-master/Example/adn.cer create mode 100755 AFNetworking-master/Example/digicert_ca_3.cer create mode 100755 AFNetworking-master/Example/en.lproj/MainMenu.xib create mode 100755 AFNetworking-master/Example/iOS-Info.plist create mode 100755 AFNetworking-master/Example/main.m create mode 100755 AFNetworking-master/Example/root_ca.cer create mode 100755 AFNetworking-master/LICENSE create mode 100755 AFNetworking-master/README.md create mode 100755 AFNetworking-master/Rakefile create mode 100755 AFNetworking-master/Tests/AFNetworking Tests.xcodeproj/project.pbxproj create mode 100755 AFNetworking-master/Tests/AFNetworking-Prefix.pch create mode 100755 AFNetworking-master/Tests/AFNetworkingTests-Info.plist create mode 100755 AFNetworking-master/Tests/OS X Tests/OS X Tests-Info.plist create mode 100755 AFNetworking-master/Tests/OS X Tests/OS X Tests-Prefix.pch create mode 100755 AFNetworking-master/Tests/OS X Tests/en.lproj/InfoPlist.strings create mode 100755 AFNetworking-master/Tests/Podfile create mode 100755 AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer create mode 100755 AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer create mode 100755 AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_2.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/AddTrust_External_CA_Root.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/COMODO_RSA_Certification_Authority.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/COMODO_RSA_Domain_Validation_Secure_Server_CA.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_0.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_1.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_2.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_3.cer create mode 100755 AFNetworking-master/Tests/Resources/HTTPBin.org/httpbinorg_01162016.cer create mode 100755 AFNetworking-master/Tests/Resources/SelfSigned/AltName.cer create mode 100755 AFNetworking-master/Tests/Resources/SelfSigned/NoDomains.cer create mode 100755 AFNetworking-master/Tests/Resources/SelfSigned/foobar.com.cer create mode 100755 AFNetworking-master/Tests/Schemes/OS X Tests.xcscheme create mode 100755 AFNetworking-master/Tests/Schemes/iOS Tests.xcscheme create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPClientTests.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPRequestOperationTests.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFImageRequestOperationTests.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFJSONRequestOperationTests.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.h create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.h create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.m create mode 100755 AFNetworking-master/Tests/Tests/1.0 Tests/AFURLConnectionOperationTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFHTTPRequestOperationTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFHTTPRequestSerializationTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFHTTPResponseSerializationTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFHTTPSessionManagerTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFJSONSerializationTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFNetworkActivityManagerTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFNetworkReachabilityManagerTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFPropertyListResponseSerializerTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFSecurityPolicyTests.m create mode 100755 AFNetworking-master/Tests/Tests/AFTestCase.h create mode 100755 AFNetworking-master/Tests/Tests/AFTestCase.m create mode 100755 AFNetworking-master/Tests/Tests/AFURLSessionManagerTests.m create mode 100755 AFNetworking-master/Tests/iOS Tests/en.lproj/InfoPlist.strings create mode 100755 AFNetworking-master/Tests/iOS Tests/iOS Tests-Info.plist create mode 100755 AFNetworking-master/Tests/iOS Tests/iOS Tests-Prefix.pch create mode 100755 AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIKit+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.h create mode 100755 AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.m create mode 100644 AdDataModel.h create mode 100644 AdDataModel.m create mode 100644 AdDataPlist.plist create mode 100644 AdScrollView.h create mode 100644 AdScrollView.m create mode 100755 ArtistsCell.h create mode 100755 ArtistsCell.m create mode 100755 ArtistsCell.xib create mode 100755 ArtistsViewController.h create mode 100755 ArtistsViewController.m create mode 100755 ArtistsViewController.xib create mode 100755 CNPPopupController.h create mode 100755 CNPPopupController.m create mode 100755 DAContextMenuTableViewController/DAContextMenuCell.h create mode 100755 DAContextMenuTableViewController/DAContextMenuCell.m create mode 100755 DAContextMenuTableViewController/DAContextMenuTableViewController.h create mode 100755 DAContextMenuTableViewController/DAContextMenuTableViewController.m create mode 100755 DAContextMenuTableViewController/DAOverlayView.h create mode 100755 DAContextMenuTableViewController/DAOverlayView.m create mode 100755 DetailViewController.h create mode 100755 DetailViewController.m create mode 100755 DetailViewController.xib create mode 100644 DownSheet/DownSheet.xcodeproj/project.pbxproj create mode 100644 DownSheet/DownSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/DownSheet.xcscheme create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/DownSheet.xcscheme create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/DownSheet.xcscheme create mode 100644 DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 DownSheet/DownSheet/AppDelegate.h create mode 100644 DownSheet/DownSheet/AppDelegate.m create mode 100755 DownSheet/DownSheet/Classes/DownSheet.h create mode 100755 DownSheet/DownSheet/Classes/DownSheet.m create mode 100755 DownSheet/DownSheet/Classes/DownSheetCell.h create mode 100755 DownSheet/DownSheet/Classes/DownSheetCell.m create mode 100644 DownSheet/DownSheet/Classes/job_first.plist create mode 100644 DownSheet/DownSheet/Classes/job_second(0).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(1).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(10).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(2).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(3).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(4).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(5).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(6).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(7).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(8).plist create mode 100644 DownSheet/DownSheet/Classes/job_second(9).plist create mode 100644 DownSheet/DownSheet/Classes/job_third(0).plist create mode 100644 DownSheet/DownSheet/Classes/job_third(1).plist create mode 100644 DownSheet/DownSheet/Classes/job_third(2).plist create mode 100644 DownSheet/DownSheet/DownSheet-Info.plist create mode 100644 DownSheet/DownSheet/DownSheet-Prefix.pch create mode 100644 DownSheet/DownSheet/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 DownSheet/DownSheet/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 DownSheet/DownSheet/Receive_email.h create mode 100644 DownSheet/DownSheet/Receive_email.m create mode 100755 DownSheet/DownSheet/Resouce/icon_add@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_add_hover@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_album@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_album_hover@2x.png create mode 100644 DownSheet/DownSheet/Resouce/icon_buy@2x.png create mode 100644 DownSheet/DownSheet/Resouce/icon_buy_hover@2x.png create mode 100644 DownSheet/DownSheet/Resouce/icon_computer@2x.png create mode 100644 DownSheet/DownSheet/Resouce/icon_computer_hover@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_del@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_del_hover@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_down@2x.png create mode 100755 DownSheet/DownSheet/Resouce/icon_down_hover@2x.png create mode 100644 DownSheet/DownSheet/ViewController.h create mode 100644 DownSheet/DownSheet/ViewController.m create mode 100644 DownSheet/DownSheet/Work_Day.h create mode 100644 DownSheet/DownSheet/Work_Day.m create mode 100644 DownSheet/DownSheet/email.h create mode 100644 DownSheet/DownSheet/email.m create mode 100644 DownSheet/DownSheet/en.lproj/InfoPlist.strings create mode 100644 DownSheet/DownSheet/lowest_study.plist create mode 100644 DownSheet/DownSheet/main.m create mode 100644 DownSheet/DownSheet/salary_range.plist create mode 100644 DownSheet/DownSheet/school_exp.plist create mode 100644 DownSheet/DownSheet/send_cycle.plist create mode 100644 DownSheet/DownSheet/time_window.h create mode 100644 DownSheet/DownSheet/time_window.m create mode 100644 DownSheet/DownSheet/work_cell.h create mode 100644 DownSheet/DownSheet/work_cell.m create mode 100644 DownSheet/DownSheet/work_days.plist create mode 100644 DownSheet/DownSheet/work_time.plist create mode 100644 DownSheet/DownSheet/workday.h create mode 100644 DownSheet/DownSheet/workday.m create mode 100644 DownSheet/DownSheetTests/DownSheetTests-Info.plist create mode 100644 DownSheet/DownSheetTests/DownSheetTests.m create mode 100644 DownSheet/DownSheetTests/en.lproj/InfoPlist.strings create mode 100755 EAIntroPage.h create mode 100755 EAIntroPage.m create mode 100755 EAIntroView.h create mode 100755 EAIntroView.m create mode 100644 GHIJ_city.plist create mode 100644 KLMN_city.plist create mode 100755 NSData+SDDataCache.h create mode 100755 NSData+SDDataCache.m create mode 100644 OPQR_city.plist create mode 100755 PlayListCell.h create mode 100755 PlayListCell.m create mode 100755 PlayListCell.xib create mode 100755 PlayListTableViewController.h create mode 100755 PlayListTableViewController.m create mode 100755 PlayListTableViewController.xib create mode 100644 README.md create mode 100755 SDCollectionViewCell.h create mode 100755 SDCollectionViewCell.m create mode 100755 SDCycleScrollView.h create mode 100755 SDCycleScrollView.m create mode 100755 SRMonthPicker.h create mode 100755 SRMonthPicker.m create mode 100644 STUV_city.plist create mode 100755 SampleViewController.h create mode 100755 SampleViewController.m create mode 100755 SampleViewController.xib create mode 100644 ShiXiSeng_Main.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 ShiXiSeng_Main/>=.png create mode 100644 ShiXiSeng_Main/About.h create mode 100644 ShiXiSeng_Main/About.m create mode 100644 ShiXiSeng_Main/Accountset.h create mode 100644 ShiXiSeng_Main/Accountset.m create mode 100644 ShiXiSeng_Main/AllMsg.h create mode 100644 ShiXiSeng_Main/AllMsg.m create mode 100644 ShiXiSeng_Main/AllMsg.xib delete mode 100644 ShiXiSeng_Main/Base.lproj/Main.storyboard create mode 100644 ShiXiSeng_Main/ChanceViewController.h create mode 100644 ShiXiSeng_Main/ChanceViewController.m create mode 100755 ShiXiSeng_Main/Classes/DownSheet.h create mode 100755 ShiXiSeng_Main/Classes/DownSheet.m create mode 100755 ShiXiSeng_Main/Classes/DownSheetCell.h create mode 100755 ShiXiSeng_Main/Classes/DownSheetCell.m create mode 100644 ShiXiSeng_Main/Classes/job_first.plist create mode 100644 ShiXiSeng_Main/Classes/job_second(0).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(1).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(10).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(2).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(3).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(4).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(5).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(6).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(7).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(8).plist create mode 100644 ShiXiSeng_Main/Classes/job_second(9).plist create mode 100644 ShiXiSeng_Main/Classes/job_third(0).plist create mode 100644 ShiXiSeng_Main/Classes/job_third(1).plist create mode 100644 ShiXiSeng_Main/Classes/job_third(2).plist create mode 100644 ShiXiSeng_Main/CompanyInfoa.h create mode 100644 ShiXiSeng_Main/CompanyInfoa.m create mode 100644 ShiXiSeng_Main/CompanyPosition.h create mode 100644 ShiXiSeng_Main/CompanyPosition.m create mode 100644 ShiXiSeng_Main/CustomToolbar.h create mode 100644 ShiXiSeng_Main/CustomToolbar.m create mode 100644 ShiXiSeng_Main/Delegate.h create mode 100644 ShiXiSeng_Main/Education_exp.h create mode 100644 ShiXiSeng_Main/Education_exp.m create mode 100644 ShiXiSeng_Main/ExitViewController.h create mode 100644 ShiXiSeng_Main/ExitViewController.m create mode 100644 ShiXiSeng_Main/FeedBackViewController.h create mode 100644 ShiXiSeng_Main/FeedBackViewController.m create mode 100644 ShiXiSeng_Main/Fill_Record.h create mode 100644 ShiXiSeng_Main/Fill_Record.m create mode 100644 ShiXiSeng_Main/Fill_Record_Cell.h create mode 100644 ShiXiSeng_Main/Fill_Record_Cell.m create mode 100644 ShiXiSeng_Main/FindControllerViewController.h create mode 100644 ShiXiSeng_Main/FindControllerViewController.m create mode 100644 ShiXiSeng_Main/FindViewController.h create mode 100644 ShiXiSeng_Main/FindViewController.m create mode 100644 ShiXiSeng_Main/FixCom.h create mode 100644 ShiXiSeng_Main/FixCom.m create mode 100644 ShiXiSeng_Main/FixCompany.h create mode 100644 ShiXiSeng_Main/FixCompany.m create mode 100644 ShiXiSeng_Main/Hope.h create mode 100644 ShiXiSeng_Main/Hope.m create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29-1.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/40.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/57-1.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/57.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/60-1.png create mode 100644 ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/60.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/homeICON.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/website.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/1.imageset/1.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/1.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/2.imageset/2.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/2.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/3.imageset/3.png create mode 100644 ShiXiSeng_Main/Images.xcassets/Intro/3.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/delete.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/delete.imageset/delete.png create mode 100644 ShiXiSeng_Main/Images.xcassets/pencil.imageset/Contents.json create mode 100644 ShiXiSeng_Main/Images.xcassets/pencil.imageset/pencil.png create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\345\217\221\347\216\260.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\345\217\221\347\216\260.imageset/\345\217\221\347\216\260.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/\346\210\221\347\232\204.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/\346\234\272\344\274\232.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/\346\266\210\346\201\257.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247.imageset/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247/\345\217\221\351\200\201.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\205\263\344\272\216\345\256\236\344\271\240\345\203\247/\345\217\221\351\200\201.imageset/\345\217\221\351\200\201.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/\345\241\253\345\206\231\347\256\200\345\216\206.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/add.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/add.imageset/add.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/edit1.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/edit1.imageset/edit1.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/email.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/email.imageset/email.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/phone.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/school.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/school.imageset/school.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/\345\241\253\345\206\231\350\203\214\346\231\257.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/\345\241\253\345\206\231\350\203\214\346\231\257.imageset/\345\241\253\345\206\231\347\256\200\345\216\206.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/\347\274\226\350\276\221.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/\347\274\226\350\276\221.imageset/\347\274\226\350\276\221.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\244\264\345\203\217.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\244\264\345\203\217.imageset/\345\244\264\345\203\217.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/MineBG.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\212\225\351\200\222\347\272\252\345\275\225.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\212\225\351\200\222\347\272\252\345\275\225.imageset/\346\212\225\351\200\222\347\272\252\345\275\225.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\201\214\344\275\215\350\256\242\351\230\205.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\201\214\344\275\215\350\256\242\351\230\205.imageset/\350\201\214\344\275\215\350\256\242\351\230\205.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/\350\256\276\347\275\256.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\345\207\206\345\244\207\351\241\265.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\345\207\206\345\244\207\351\241\265.imageset/\345\212\240\350\275\275\351\241\265\351\235\242.png" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/Contents.json" create mode 100644 "ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/\347\231\273\345\275\225\347\225\214\351\235\242.png" create mode 100644 ShiXiSeng_Main/InteMsg.h create mode 100644 ShiXiSeng_Main/InteMsg.m create mode 100644 ShiXiSeng_Main/InteMsg.xib create mode 100644 ShiXiSeng_Main/Job.h create mode 100644 ShiXiSeng_Main/Job.m create mode 100644 ShiXiSeng_Main/Job.plist create mode 100644 ShiXiSeng_Main/Job.xib create mode 100644 ShiXiSeng_Main/JobCell.h create mode 100644 ShiXiSeng_Main/JobCell.m create mode 100644 ShiXiSeng_Main/JobCollect.h create mode 100644 ShiXiSeng_Main/JobCollect.m create mode 100644 ShiXiSeng_Main/JobInfoa.h create mode 100644 ShiXiSeng_Main/JobInfoa.m create mode 100644 ShiXiSeng_Main/JobTable.h create mode 100644 ShiXiSeng_Main/JobTable.m create mode 100644 ShiXiSeng_Main/JobView.h create mode 100644 ShiXiSeng_Main/JobView.m create mode 100644 ShiXiSeng_Main/Job_Sub_Cell.h create mode 100644 ShiXiSeng_Main/Job_Sub_Cell.m create mode 100644 ShiXiSeng_Main/Job_Subscribe.h create mode 100644 ShiXiSeng_Main/Job_Subscribe.m create mode 100644 ShiXiSeng_Main/Jobdetail.h create mode 100644 ShiXiSeng_Main/Jobdetail.m create mode 100644 ShiXiSeng_Main/MViewController.h create mode 100644 ShiXiSeng_Main/MViewController.m create mode 100644 ShiXiSeng_Main/Main.storyboard create mode 100644 ShiXiSeng_Main/MessageViewController.h create mode 100644 ShiXiSeng_Main/MessageViewController.m create mode 100644 ShiXiSeng_Main/MineTableViewController.h create mode 100644 ShiXiSeng_Main/MineTableViewController.m create mode 100644 ShiXiSeng_Main/MsgCell.h create mode 100644 ShiXiSeng_Main/MsgCell.m create mode 100644 ShiXiSeng_Main/MsgCell.xib create mode 100644 ShiXiSeng_Main/MsgDetail.h create mode 100644 ShiXiSeng_Main/MsgDetail.m create mode 100644 ShiXiSeng_Main/NewMessage.h create mode 100644 ShiXiSeng_Main/NewMessage.m create mode 100644 ShiXiSeng_Main/OneDelegate.m create mode 100644 ShiXiSeng_Main/PViewController.h create mode 100644 ShiXiSeng_Main/PViewController.m create mode 100644 ShiXiSeng_Main/Personinfo.h create mode 100644 ShiXiSeng_Main/Personinfo.m create mode 100644 ShiXiSeng_Main/PooCodeView.h create mode 100644 ShiXiSeng_Main/PooCodeView.m create mode 100644 ShiXiSeng_Main/PrefixHeader.pch create mode 100644 ShiXiSeng_Main/Project_exp.h create mode 100644 ShiXiSeng_Main/Project_exp.m create mode 100644 ShiXiSeng_Main/PwdViewController.h create mode 100644 ShiXiSeng_Main/PwdViewController.m create mode 100644 ShiXiSeng_Main/RefuseMsg.h create mode 100644 ShiXiSeng_Main/RefuseMsg.m create mode 100644 ShiXiSeng_Main/RefuseMsg.xib create mode 100644 ShiXiSeng_Main/Register.h create mode 100644 ShiXiSeng_Main/Register.m create mode 100644 ShiXiSeng_Main/Rest.h create mode 100644 ShiXiSeng_Main/Rest.m create mode 100644 ShiXiSeng_Main/School_exp.h create mode 100644 ShiXiSeng_Main/School_exp.m create mode 100644 ShiXiSeng_Main/SignIn.h create mode 100644 ShiXiSeng_Main/SignIn.m create mode 100644 ShiXiSeng_Main/TESTTableViewController.h create mode 100644 ShiXiSeng_Main/TESTTableViewController.m create mode 100644 ShiXiSeng_Main/TestController.h create mode 100644 ShiXiSeng_Main/TestController.m create mode 100644 ShiXiSeng_Main/TestViewController.h create mode 100644 ShiXiSeng_Main/TestViewController.m create mode 100644 ShiXiSeng_Main/Work_Day.h create mode 100644 ShiXiSeng_Main/Work_Day.m create mode 100644 ShiXiSeng_Main/com.h create mode 100644 ShiXiSeng_Main/com.m create mode 100644 ShiXiSeng_Main/job_sub_content.h create mode 100644 ShiXiSeng_Main/job_sub_content.m create mode 100644 ShiXiSeng_Main/jobcollect_cell.h create mode 100644 ShiXiSeng_Main/jobcollect_cell.m create mode 100644 ShiXiSeng_Main/lookMsg.h create mode 100644 ShiXiSeng_Main/lookMsg.m create mode 100644 ShiXiSeng_Main/lookMsg.xib create mode 100644 ShiXiSeng_Main/position.h create mode 100644 ShiXiSeng_Main/position.m create mode 100644 ShiXiSeng_Main/salary_range.plist create mode 100644 ShiXiSeng_Main/work_cell.h create mode 100644 ShiXiSeng_Main/work_cell.m create mode 100644 ShiXiSeng_Main/work_days.plist create mode 100644 ShiXiSeng_Main/work_exp.h create mode 100644 ShiXiSeng_Main/work_exp.m create mode 100644 ShiXiSeng_Main/work_time.plist create mode 100644 ShiXiSeng_Main/workday.h create mode 100644 ShiXiSeng_Main/workday.m create mode 100644 "ShiXiSeng_Main/\344\270\255\345\233\275\347\247\221\345\255\246\351\231\242.png" create mode 100644 "ShiXiSeng_Main/\344\272\254\344\270\234.png" create mode 100644 "ShiXiSeng_Main/\345\230\200\345\227\222\346\270\205\345\215\225.png" create mode 100644 "ShiXiSeng_Main/\345\256\232\344\275\215.png" create mode 100644 "ShiXiSeng_Main/\346\227\245\345\216\206.png" create mode 100644 "ShiXiSeng_Main/\347\210\261\345\245\207\350\211\272.png" create mode 100644 "ShiXiSeng_Main/\347\231\276\350\257\215\346\226\251.png" create mode 100644 "ShiXiSeng_Main/\350\201\224\346\203\263.png" create mode 100755 TAAbstractDotView.h create mode 100755 TAAbstractDotView.m create mode 100755 TAAnimatedDotView.h create mode 100755 TAAnimatedDotView.m create mode 100755 TADotView.h create mode 100755 TADotView.m create mode 100755 TAPageControl.h create mode 100755 TAPageControl.m create mode 100755 UIView+SDExtension.h create mode 100755 UIView+SDExtension.m create mode 100755 VPImageCropper/VPImageCropperViewController.h create mode 100755 VPImageCropper/VPImageCropperViewController.m create mode 100644 WXYZ_city.plist create mode 100755 YSLContainerViewController.h create mode 100755 YSLContainerViewController.m create mode 100755 YSLScrollMenuView.h create mode 100755 YSLScrollMenuView.m create mode 100644 city/CollectionHeadView.h create mode 100644 city/CollectionHeadView.m create mode 100644 city/test.h create mode 100644 city/test.m create mode 100644 city/testcell.h create mode 100644 city/testcell.m create mode 100644 hot_city.plist create mode 100644 image0.png create mode 100644 image1.png create mode 100644 image2.png create mode 100644 image3.png create mode 100644 industry.h create mode 100644 industry.m create mode 100644 industry.plist create mode 100644 industry_cell.h create mode 100644 industry_cell.m create mode 100644 lowest_study.plist create mode 100644 test.png create mode 100644 "\345\217\221\347\216\260.png" create mode 100644 "\346\210\221\347\232\204.png" create mode 100644 "\346\234\272\344\274\232.png" create mode 100644 "\346\266\210\346\201\257.png" diff --git a/ABCDEF_city.plist b/ABCDEF_city.plist new file mode 100644 index 0000000..cadb6cd --- /dev/null +++ b/ABCDEF_city.plist @@ -0,0 +1,42 @@ + + + + + + hot_city + 北京 + + + hot_city + 成都 + + + hot_city + 大连 + + + hot_city + 重庆 + + + hot_city + 佛山 + + + hot_city + 大庆 + + + hot_city + 长沙 + + + hot_city + 福州 + + + hot_city + 长春 + + + diff --git a/AFNetworking-master/.cocoadocs.yml b/AFNetworking-master/.cocoadocs.yml new file mode 100755 index 0000000..aaf16cb --- /dev/null +++ b/AFNetworking-master/.cocoadocs.yml @@ -0,0 +1,7 @@ +highlight-color: "#F89915" +highlight-dark-color: "#E23B1B" +darker-color: "#D8A688" +darker-dark-color: "#E93D1C" +background-color: "#E9DFDB" +alt-link-color: "#E23B1B" +warning-color: "#E23B1B" diff --git a/AFNetworking-master/.gitignore b/AFNetworking-master/.gitignore new file mode 100755 index 0000000..d9b2144 --- /dev/null +++ b/AFNetworking-master/.gitignore @@ -0,0 +1,21 @@ +# Xcode +.DS_Store +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.xcworkspace +!default.xcworkspace +xcuserdata +profile +*.moved-aside +DerivedData +.idea/ +Tests/Pods +Tests/Podfile.lock +Tests/AFNetworking Tests.xcodeproj/xcshareddata/xcschemes/ diff --git a/AFNetworking-master/.travis.yml b/AFNetworking-master/.travis.yml new file mode 100755 index 0000000..b669ab6 --- /dev/null +++ b/AFNetworking-master/.travis.yml @@ -0,0 +1,7 @@ +language: objective-c +before_install: + - gem install cocoapods --no-rdoc --no-ri --no-document --quiet + - gem install xcpretty --no-rdoc --no-ri --no-document --quiet + - cd Tests && pod install && cd $TRAVIS_BUILD_DIR +script: rake test + diff --git a/AFNetworking-master/AFNetworking.podspec b/AFNetworking-master/AFNetworking.podspec new file mode 100755 index 0000000..70739f5 --- /dev/null +++ b/AFNetworking-master/AFNetworking.podspec @@ -0,0 +1,60 @@ +Pod::Spec.new do |s| + s.name = 'AFNetworking' + s.version = '2.5.3' + s.license = 'MIT' + s.summary = 'A delightful iOS and OS X networking framework.' + s.homepage = 'https://github.com/AFNetworking/AFNetworking' + s.social_media_url = 'https://twitter.com/AFNetworking' + s.authors = { 'Mattt Thompson' => 'm@mattt.me' } + s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } + s.requires_arc = true + + s.ios.deployment_target = '6.0' + s.osx.deployment_target = '10.8' + + s.public_header_files = 'AFNetworking/*.h' + s.source_files = 'AFNetworking/AFNetworking.h' + + s.subspec 'Serialization' do |ss| + ss.source_files = 'AFNetworking/AFURL{Request,Response}Serialization.{h,m}' + ss.ios.frameworks = 'MobileCoreServices', 'CoreGraphics' + ss.osx.frameworks = 'CoreServices' + end + + s.subspec 'Security' do |ss| + ss.source_files = 'AFNetworking/AFSecurityPolicy.{h,m}' + ss.frameworks = 'Security' + end + + s.subspec 'Reachability' do |ss| + ss.source_files = 'AFNetworking/AFNetworkReachabilityManager.{h,m}' + ss.frameworks = 'SystemConfiguration' + end + + s.subspec 'NSURLConnection' do |ss| + ss.dependency 'AFNetworking/Serialization' + ss.dependency 'AFNetworking/Reachability' + ss.dependency 'AFNetworking/Security' + + ss.source_files = 'AFNetworking/AFURLConnectionOperation.{h,m}', 'AFNetworking/AFHTTPRequestOperation.{h,m}', 'AFNetworking/AFHTTPRequestOperationManager.{h,m}' + end + + s.subspec 'NSURLSession' do |ss| + ss.dependency 'AFNetworking/Serialization' + ss.dependency 'AFNetworking/Reachability' + ss.dependency 'AFNetworking/Security' + + ss.source_files = 'AFNetworking/AFURLSessionManager.{h,m}', 'AFNetworking/AFHTTPSessionManager.{h,m}' + end + + s.subspec 'UIKit' do |ss| + ss.ios.deployment_target = '6.0' + + ss.dependency 'AFNetworking/NSURLConnection' + ss.dependency 'AFNetworking/NSURLSession' + + ss.ios.public_header_files = 'UIKit+AFNetworking/*.h' + ss.ios.source_files = 'UIKit+AFNetworking' + ss.osx.source_files = '' + end +end diff --git a/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.h b/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.h new file mode 100755 index 0000000..321d4e7 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.h @@ -0,0 +1,66 @@ +// AFHTTPRequestOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import "AFURLConnectionOperation.h" + +/** + `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + */ +@interface AFHTTPRequestOperation : AFURLConnectionOperation + +///------------------------------------------------ +/// @name Getting HTTP URL Connection Information +///------------------------------------------------ + +/** + The last HTTP response received by the operation's connection. + */ +@property (readonly, nonatomic, strong) NSHTTPURLResponse *response; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error. + */ +@property (readonly, nonatomic, strong) id responseObject; + +///----------------------------------------------------------- +/// @name Setting Completion Block Success / Failure Callbacks +///----------------------------------------------------------- + +/** + Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed. + + This method should be overridden in subclasses in order to specify the response object passed into the success block. + + @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request. + @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request. + */ +- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end diff --git a/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.m new file mode 100755 index 0000000..b8deda8 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPRequestOperation.m @@ -0,0 +1,206 @@ +// AFHTTPRequestOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFHTTPRequestOperation.h" + +static dispatch_queue_t http_request_operation_processing_queue() { + static dispatch_queue_t af_http_request_operation_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_processing_queue = dispatch_queue_create("com.alamofire.networking.http-request.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_http_request_operation_processing_queue; +} + +static dispatch_group_t http_request_operation_completion_group() { + static dispatch_group_t af_http_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_http_request_operation_completion_group = dispatch_group_create(); + }); + + return af_http_request_operation_completion_group; +} + +#pragma mark - + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@end + +@interface AFHTTPRequestOperation () +@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; +@property (readwrite, nonatomic, strong) id responseObject; +@property (readwrite, nonatomic, strong) NSError *responseSerializationError; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@end + +@implementation AFHTTPRequestOperation +@dynamic response; +@dynamic lock; + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + self = [super initWithRequest:urlRequest]; + if (!self) { + return nil; + } + + self.responseSerializer = [AFHTTPResponseSerializer serializer]; + + return self; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [self.lock lock]; + _responseSerializer = responseSerializer; + self.responseObject = nil; + self.responseSerializationError = nil; + [self.lock unlock]; +} + +- (id)responseObject { + [self.lock lock]; + if (!_responseObject && [self isFinished] && !self.error) { + NSError *error = nil; + self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; + if (error) { + self.responseSerializationError = error; + } + } + [self.lock unlock]; + + return _responseObject; +} + +- (NSError *)error { + if (_responseSerializationError) { + return _responseSerializationError; + } else { + return [super error]; + } +} + +#pragma mark - AFHTTPRequestOperation + +- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-retain-cycles" +#pragma clang diagnostic ignored "-Wgnu" + self.completionBlock = ^{ + if (self.completionGroup) { + dispatch_group_enter(self.completionGroup); + } + + dispatch_async(http_request_operation_processing_queue(), ^{ + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + id responseObject = self.responseObject; + if (self.error) { + if (failure) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(self, self.error); + }); + } + } else { + if (success) { + dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ + success(self, responseObject); + }); + } + } + } + + if (self.completionGroup) { + dispatch_group_leave(self.completionGroup); + } + }); + }; +#pragma clang diagnostic pop +} + +#pragma mark - AFURLRequestOperation + +- (void)pause { + [super pause]; + + u_int64_t offset = 0; + if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { + offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; + } else { + offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length]; + } + + NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy]; + if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@"ETag"]) { + [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@"ETag"] forHTTPHeaderField:@"If-Range"]; + } + [mutableURLRequest setValue:[NSString stringWithFormat:@"bytes=%llu-", offset] forHTTPHeaderField:@"Range"]; + self.request = mutableURLRequest; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperation *operation = [super copyWithZone:zone]; + + operation.responseSerializer = [self.responseSerializer copyWithZone:zone]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.h b/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.h new file mode 100755 index 0000000..17caa78 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.h @@ -0,0 +1,323 @@ +// AFHTTPRequestOperationManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#import "AFNetworkReachabilityManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSSecureCoding & NSCopying Caveats + + `AFHTTPRequestOperationManager` conforms to the `NSSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however: + + - Archives and copies of HTTP clients will be initialized with an empty operation queue. + - NSSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set. + */ +@interface AFHTTPRequestOperationManager : NSObject + +/** + The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + The operation queue on which request operations are scheduled and run. + */ +@property (nonatomic, strong) NSOperationQueue *operationQueue; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether request operations should consult the credential storage for authenticating the connection. `YES` by default. + + @see AFURLConnectionOperation -shouldUseCredentialStorage + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used by request operations for authentication challenges. + + @see AFURLConnectionOperation -credential + */ +@property (nonatomic, strong) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------------------ +/// @name Managing Network Reachability +///------------------------------------ + +/** + The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Creating and Initializing HTTP Clients +///--------------------------------------------- + +/** + Creates and returns an `AFHTTPRequestOperationManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPRequestOperationManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(NSURL *)url NS_DESIGNATED_INITIALIZER; + +///--------------------------------------- +/// @name Managing HTTP Request Operations +///--------------------------------------- + +/** + Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client. + + @param request The request object to be loaded asynchronously during execution of the operation. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred. + */ +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `AFHTTPRequestOperation` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +/** + Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. + + @see -HTTPRequestOperationWithRequest:success:failure: + */ +- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; + +@end + diff --git a/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.m b/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.m new file mode 100755 index 0000000..60739e5 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.m @@ -0,0 +1,284 @@ +// AFHTTPRequestOperationManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import "AFHTTPRequestOperationManager.h" +#import "AFHTTPRequestOperation.h" + +#import +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +@interface AFHTTPRequestOperationManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPRequestOperationManager + ++ (instancetype)manager { + return [[self alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + self = [super init]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; + + self.operationQueue = [[NSOperationQueue alloc] init]; + + self.shouldUseCredentialStorage = YES; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + return [self HTTPRequestOperationWithRequest:request success:success failure:failure]; +} + +- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + operation.responseSerializer = self.responseSerializer; + operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; + operation.credential = self.credential; + operation.securityPolicy = self.securityPolicy; + + [operation setCompletionBlockWithSuccess:success failure:failure]; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +#pragma mark - + +- (AFHTTPRequestOperation *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) { + if (success) { + success(requestOperation); + } + } failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure +{ + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [self.operationQueue addOperation:operation]; + + return operation; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))]; + + self = [self initWithBaseURL:baseURL]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFHTTPSessionManager.h b/AFNetworking-master/AFNetworking/AFHTTPSessionManager.h new file mode 100755 index 0000000..cc98bab --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1,247 @@ +// AFHTTPSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +#import "AFURLSessionManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +@interface AFHTTPSessionManager : AFURLSessionManager + +/** + The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns an `AFHTTPSessionManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(NSURL *)url; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + @param configuration The configuration used to create the managed session. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure; + +@end + +#endif diff --git a/AFNetworking-master/AFNetworking/AFHTTPSessionManager.m b/AFNetworking-master/AFNetworking/AFHTTPSessionManager.m new file mode 100755 index 0000000..2b8352e --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFHTTPSessionManager.m @@ -0,0 +1,321 @@ +// AFHTTPSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFHTTPSessionManager.h" + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +#import +#import + +#ifdef _SYSTEMCONFIGURATION_H +#import +#import +#import +#import +#import +#endif + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +@interface AFHTTPSessionManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPSessionManager +@dynamic responseSerializer; + ++ (instancetype)manager { + return [[[self class] alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + return [self initWithBaseURL:url sessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + return [self initWithBaseURL:nil sessionConfiguration:configuration]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration +{ + self = [super initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + return self; +} + +#pragma mark - + +#ifdef _SYSTEMCONFIGURATION_H +#endif + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [super setResponseSerializer:responseSerializer]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, __unused id responseObject) { + if (success) { + success(task); + } + } failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(task, error); + } + } else { + if (success) { + success(task, responseObject); + } + } + }]; + + [task resume]; + + return task; +} + +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *, id))success + failure:(void (^)(NSURLSessionDataTask *, NSError *))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); +#pragma clang diagnostic pop + } + + return nil; + } + + __block NSURLSessionDataTask *dataTask = nil; + dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(dataTask, error); + } + } else { + if (success) { + success(dataTask, responseObject); + } + } + }]; + + return dataTask; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + if (!configuration) { + NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; + if (configurationIdentifier) { +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) + configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; +#else + configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; +#endif + } + } + + self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; + } else { + [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; + } + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + + return HTTPClient; +} + +@end + +#endif diff --git a/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.h b/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.h new file mode 100755 index 0000000..4ce2a36 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1,200 @@ +// AFNetworkReachabilityManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { + AFNetworkReachabilityStatusUnknown = -1, + AFNetworkReachabilityStatusNotReachable = 0, + AFNetworkReachabilityStatusReachableViaWWAN = 1, + AFNetworkReachabilityStatusReachableViaWiFi = 2, +}; + +/** + `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + + Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. + + See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/) + + @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. + */ +@interface AFNetworkReachabilityManager : NSObject + +/** + The current network reachability status. + */ +@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; + +/** + Whether or not the network is currently reachable. + */ +@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; + +/** + Whether or not the network is currently reachable via WWAN. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; + +/** + Whether or not the network is currently reachable via WiFi. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Returns the shared network reachability manager. + */ ++ (instancetype)sharedManager; + +/** + Creates and returns a network reachability manager for the specified domain. + + @param domain The domain used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified domain. + */ ++ (instancetype)managerForDomain:(NSString *)domain; + +/** + Creates and returns a network reachability manager for the socket address. + + @param address The socket address (`sockaddr_in`) used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified socket address. + */ ++ (instancetype)managerForAddress:(const void *)address; + +/** + Initializes an instance of a network reachability manager from the specified reachability object. + + @param reachability The reachability object to monitor. + + @return An initialized network reachability manager, actively monitoring the specified reachability. + */ +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; + +///-------------------------------------------------- +/// @name Starting & Stopping Reachability Monitoring +///-------------------------------------------------- + +/** + Starts monitoring for changes in network reachability status. + */ +- (void)startMonitoring; + +/** + Stops monitoring for changes in network reachability status. + */ +- (void)stopMonitoring; + +///------------------------------------------------- +/// @name Getting Localized Reachability Description +///------------------------------------------------- + +/** + Returns a localized string representation of the current network reachability status. + */ +- (NSString *)localizedNetworkReachabilityStatusString; + +///--------------------------------------------------- +/// @name Setting Network Reachability Change Callback +///--------------------------------------------------- + +/** + Sets a callback to be executed when the network availability of the `baseURL` host changes. + + @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. + */ +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Network Reachability + + The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. + + enum { + AFNetworkReachabilityStatusUnknown, + AFNetworkReachabilityStatusNotReachable, + AFNetworkReachabilityStatusReachableViaWWAN, + AFNetworkReachabilityStatusReachableViaWiFi, + } + + `AFNetworkReachabilityStatusUnknown` + The `baseURL` host reachability is not known. + + `AFNetworkReachabilityStatusNotReachable` + The `baseURL` host cannot be reached. + + `AFNetworkReachabilityStatusReachableViaWWAN` + The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. + + `AFNetworkReachabilityStatusReachableViaWiFi` + The `baseURL` host can be reached via a Wi-Fi connection. + + ### Keys for Notification UserInfo Dictionary + + Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. + + `AFNetworkingReachabilityNotificationStatusItem` + A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. + The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. + */ + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when network reachability changes. + This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. + + @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). + */ +extern NSString * const AFNetworkingReachabilityDidChangeNotification; +extern NSString * const AFNetworkingReachabilityNotificationStatusItem; + +///-------------------- +/// @name Functions +///-------------------- + +/** + Returns a localized string representation of an `AFNetworkReachabilityStatus` value. + */ +extern NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); diff --git a/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.m b/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.m new file mode 100755 index 0000000..25e9581 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.m @@ -0,0 +1,259 @@ +// AFNetworkReachabilityManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkReachabilityManager.h" + +#import +#import +#import +#import +#import + +NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; +NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; + +typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); + +typedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) { + AFNetworkReachabilityForAddress = 1, + AFNetworkReachabilityForAddressPair = 2, + AFNetworkReachabilityForName = 3, +}; + +NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusNotReachable: + return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWWAN: + return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWiFi: + return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); + case AFNetworkReachabilityStatusUnknown: + default: + return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); + } +} + +static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { + BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); + BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); + BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); + BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); + BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); + + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; + if (isNetworkReachable == NO) { + status = AFNetworkReachabilityStatusNotReachable; + } +#if TARGET_OS_IPHONE + else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { + status = AFNetworkReachabilityStatusReachableViaWWAN; + } +#endif + else { + status = AFNetworkReachabilityStatusReachableViaWiFi; + } + + return status; +} + +static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info; + if (block) { + block(status); + } + + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; + }); + +} + +static const void * AFNetworkReachabilityRetainCallback(const void *info) { + return Block_copy(info); +} + +static void AFNetworkReachabilityReleaseCallback(const void *info) { + if (info) { + Block_release(info); + } +} + +@interface AFNetworkReachabilityManager () +@property (readwrite, nonatomic, assign) SCNetworkReachabilityRef networkReachability; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; +@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; +@end + +@implementation AFNetworkReachabilityManager + ++ (instancetype)sharedManager { + static AFNetworkReachabilityManager *_sharedManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; + + _sharedManager = [self managerForAddress:&address]; + }); + + return _sharedManager; +} + ++ (instancetype)managerForDomain:(NSString *)domain { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForName; + + return manager; +} + ++ (instancetype)managerForAddress:(const void *)address { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress; + + return manager; +} + +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { + self = [super init]; + if (!self) { + return nil; + } + + self.networkReachability = reachability; + self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; + + return self; +} + +- (void)dealloc { + [self stopMonitoring]; + + if (_networkReachability) { + CFRelease(_networkReachability); + _networkReachability = NULL; + } +} + +#pragma mark - + +- (BOOL)isReachable { + return [self isReachableViaWWAN] || [self isReachableViaWiFi]; +} + +- (BOOL)isReachableViaWWAN { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; +} + +- (BOOL)isReachableViaWiFi { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; +} + +#pragma mark - + +- (void)startMonitoring { + [self stopMonitoring]; + + if (!self.networkReachability) { + return; + } + + __weak __typeof(self)weakSelf = self; + AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + + strongSelf.networkReachabilityStatus = status; + if (strongSelf.networkReachabilityStatusBlock) { + strongSelf.networkReachabilityStatusBlock(status); + } + + }; + + SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; + SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); + + switch (self.networkReachabilityAssociation) { + case AFNetworkReachabilityForName: + break; + case AFNetworkReachabilityForAddress: + case AFNetworkReachabilityForAddressPair: + default: { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ + SCNetworkReachabilityFlags flags; + SCNetworkReachabilityGetFlags(self.networkReachability, &flags); + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + dispatch_async(dispatch_get_main_queue(), ^{ + callback(status); + + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; + + + }); + }); + } + break; + } +} + +- (void)stopMonitoring { + if (!self.networkReachability) { + return; + } + + SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); +} + +#pragma mark - + +- (NSString *)localizedNetworkReachabilityStatusString { + return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); +} + +#pragma mark - + +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { + self.networkReachabilityStatusBlock = block; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { + if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { + return [NSSet setWithObject:@"networkReachabilityStatus"]; + } + + return [super keyPathsForValuesAffectingValueForKey:key]; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFNetworking.h b/AFNetworking-master/AFNetworking/AFNetworking.h new file mode 100755 index 0000000..68273da --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFNetworking.h @@ -0,0 +1,44 @@ +// AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" + #import "AFNetworkReachabilityManager.h" + + #import "AFURLConnectionOperation.h" + #import "AFHTTPRequestOperation.h" + #import "AFHTTPRequestOperationManager.h" + +#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \ + ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) ) + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" +#endif + +#endif /* _AFNETWORKING_ */ diff --git a/AFNetworking-master/AFNetworking/AFSecurityPolicy.h b/AFNetworking-master/AFNetworking/AFSecurityPolicy.h new file mode 100755 index 0000000..c6cec83 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1,142 @@ +// AFSecurityPolicy.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, +}; + +/** + `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + + Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + */ +@interface AFSecurityPolicy : NSObject + +/** + The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. + */ +@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; + +/** + Whether to evaluate an entire SSL certificate chain, or just the leaf certificate. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesCertificateChain; + +/** + The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. + */ +@property (nonatomic, strong) NSArray *pinnedCertificates; + +/** + Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/** + Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesDomainName; + +///----------------------------------------- +/// @name Getting Specific Security Policies +///----------------------------------------- + +/** + Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. + + @return The default security policy. + */ ++ (instancetype)defaultPolicy; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; + +///------------------------------ +/// @name Evaluating Server Trust +///------------------------------ + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + + @return Whether or not to trust the server. + + @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE; + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + @param domain The domain of serverTrust. If `nil`, the domain will not be validated. + + @return Whether or not to trust the server. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## SSL Pinning Modes + + The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. + + enum { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, + } + + `AFSSLPinningModeNone` + Do not used pinned certificates to validate servers. + + `AFSSLPinningModePublicKey` + Validate host certificates against public keys of pinned certificates. + + `AFSSLPinningModeCertificate` + Validate host certificates against pinned certificates. +*/ diff --git a/AFNetworking-master/AFNetworking/AFSecurityPolicy.m b/AFNetworking-master/AFNetworking/AFSecurityPolicy.m new file mode 100755 index 0000000..2bbff62 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFSecurityPolicy.m @@ -0,0 +1,308 @@ +// AFSecurityPolicy.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFSecurityPolicy.h" + +#import + +#if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +static NSData * AFSecKeyGetData(SecKeyRef key) { + CFDataRef data = NULL; + + __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); + + return (__bridge_transfer NSData *)data; + +_out: + if (data) { + CFRelease(data); + } + + return nil; +} +#endif + +static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + return [(__bridge id)key1 isEqual:(__bridge id)key2]; +#else + return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; +#endif +} + +static id AFPublicKeyForCertificate(NSData *certificate) { + id allowedPublicKey = nil; + SecCertificateRef allowedCertificate; + SecCertificateRef allowedCertificates[1]; + CFArrayRef tempCertificates = nil; + SecPolicyRef policy = nil; + SecTrustRef allowedTrust = nil; + SecTrustResultType result; + + allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); + __Require_Quiet(allowedCertificate != NULL, _out); + + allowedCertificates[0] = allowedCertificate; + tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + policy = SecPolicyCreateBasicX509(); + __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); + __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); + + allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); + +_out: + if (allowedTrust) { + CFRelease(allowedTrust); + } + + if (policy) { + CFRelease(policy); + } + + if (tempCertificates) { + CFRelease(tempCertificates); + } + + if (allowedCertificate) { + CFRelease(allowedCertificate); + } + + return allowedPublicKey; +} + +static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { + BOOL isValid = NO; + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); + + isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); + +_out: + return isValid; +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { + SecPolicyRef policy = SecPolicyCreateBasicX509(); + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + + SecCertificateRef someCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); + + SecTrustRef trust; + __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); + + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); + + [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; + + _out: + if (trust) { + CFRelease(trust); + } + + if (certificates) { + CFRelease(certificates); + } + + continue; + } + CFRelease(policy); + + return [NSArray arrayWithArray:trustChain]; +} + +#pragma mark - + +@interface AFSecurityPolicy() +@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; +@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys; +@end + +@implementation AFSecurityPolicy + ++ (NSArray *)defaultPinnedCertificates { + static NSArray *_defaultPinnedCertificates = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; + + NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]]; + for (NSString *path in paths) { + NSData *certificateData = [NSData dataWithContentsOfFile:path]; + [certificates addObject:certificateData]; + } + + _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates]; + }); + + return _defaultPinnedCertificates; +} + ++ (instancetype)defaultPolicy { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = AFSSLPinningModeNone; + + return securityPolicy; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = pinningMode; + + [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]]; + + return securityPolicy; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + self.validatesCertificateChain = YES; + self.validatesDomainName = YES; + + return self; +} + +- (void)setPinnedCertificates:(NSArray *)pinnedCertificates { + _pinnedCertificates = pinnedCertificates; + + if (self.pinnedCertificates) { + NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]]; + for (NSData *certificate in self.pinnedCertificates) { + id publicKey = AFPublicKeyForCertificate(certificate); + if (!publicKey) { + continue; + } + [mutablePinnedPublicKeys addObject:publicKey]; + } + self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys]; + } else { + self.pinnedPublicKeys = nil; + } +} + +#pragma mark - + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust { + return [self evaluateServerTrust:serverTrust forDomain:nil]; +} + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain +{ + NSMutableArray *policies = [NSMutableArray array]; + if (self.validatesDomainName) { + [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; + } else { + [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; + } + + SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); + + if (self.SSLPinningMode == AFSSLPinningModeNone) { + if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){ + return YES; + } else { + return NO; + } + } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + return NO; + } + + NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); + switch (self.SSLPinningMode) { + case AFSSLPinningModeNone: + default: + return NO; + case AFSSLPinningModeCertificate: { + NSMutableArray *pinnedCertificates = [NSMutableArray array]; + for (NSData *certificateData in self.pinnedCertificates) { + [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; + } + SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); + + if (!AFServerTrustIsValid(serverTrust)) { + return NO; + } + + if (!self.validatesCertificateChain) { + return YES; + } + + NSUInteger trustedCertificateCount = 0; + for (NSData *trustChainCertificate in serverCertificates) { + if ([self.pinnedCertificates containsObject:trustChainCertificate]) { + trustedCertificateCount++; + } + } + + return trustedCertificateCount == [serverCertificates count]; + } + case AFSSLPinningModePublicKey: { + NSUInteger trustedPublicKeyCount = 0; + NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); + if (!self.validatesCertificateChain && [publicKeys count] > 0) { + publicKeys = @[[publicKeys firstObject]]; + } + + for (id trustChainPublicKey in publicKeys) { + for (id pinnedPublicKey in self.pinnedPublicKeys) { + if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { + trustedPublicKeyCount += 1; + } + } + } + + return trustedPublicKeyCount > 0 && ((self.validatesCertificateChain && trustedPublicKeyCount == [serverCertificates count]) || (!self.validatesCertificateChain && trustedPublicKeyCount >= 1)); + } + } + + return NO; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { + return [NSSet setWithObject:@"pinnedCertificates"]; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFURLConnectionOperation.h b/AFNetworking-master/AFNetworking/AFURLConnectionOperation.h new file mode 100755 index 0000000..0248e67 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLConnectionOperation.h @@ -0,0 +1,343 @@ +// AFURLConnectionOperation.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" +#import "AFSecurityPolicy.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods. + + ## Subclassing Notes + + This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see "`NSURLConnection` Delegate Methods" below), or to provide additional properties and/or class constructors. + + If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes. + + ## NSURLConnection Delegate Methods + + `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods: + + - `connection:didReceiveResponse:` + - `connection:didReceiveData:` + - `connectionDidFinishLoading:` + - `connection:didFailWithError:` + - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:` + - `connection:willCacheResponse:` + - `connectionShouldUseCredentialStorage:` + - `connection:needNewBodyStream:` + - `connection:willSendRequestForAuthenticationChallenge:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Callbacks and Completion Blocks + + The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this. + + Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as ["The Deallocation Problem"](http://developer.apple.com/library/ios/#technotes/tn2109/). + + ## SSL Pinning + + Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle. + + SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice. + + Connections will be validated on all matching certificates with a `.cer` extension in the bundle root. + + ## App Extensions + + When using AFNetworking in an App Extension, `#define AF_APP_EXTENSIONS` to avoid using unavailable APIs. + + ## NSCoding & NSCopying Conformance + + `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind: + + ### NSCoding Caveats + + - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`. + - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged. + + ### NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations. + - A copy of an operation will not include the `outputStream` of the original. + - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied. + */ + +@interface AFURLConnectionOperation : NSOperation + +///------------------------------- +/// @name Accessing Run Loop Modes +///------------------------------- + +/** + The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`. + */ +@property (nonatomic, strong) NSSet *runLoopModes; + +///----------------------------------------- +/// @name Getting URL Connection Information +///----------------------------------------- + +/** + The request used by the operation's connection. + */ +@property (readonly, nonatomic, strong) NSURLRequest *request; + +/** + The last response received by the operation's connection. + */ +@property (readonly, nonatomic, strong) NSURLResponse *response; + +/** + The error, if any, that occurred in the lifecycle of the request. + */ +@property (readonly, nonatomic, strong) NSError *error; + +///---------------------------- +/// @name Getting Response Data +///---------------------------- + +/** + The data received during the request. + */ +@property (readonly, nonatomic, strong) NSData *responseData; + +/** + The string representation of the response data. + */ +@property (readonly, nonatomic, copy) NSString *responseString; + +/** + The string encoding of the response. + + If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`. + */ +@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding; + +///------------------------------- +/// @name Managing URL Credentials +///------------------------------- + +/** + Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. + + This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. + */ +@property (nonatomic, assign) BOOL shouldUseCredentialStorage; + +/** + The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. + + This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. + */ +@property (nonatomic, strong) NSURLCredential *credential; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used to evaluate server trust for secure connections. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///------------------------ +/// @name Accessing Streams +///------------------------ + +/** + The input stream used to read data to be sent during the request. + + This property acts as a proxy to the `HTTPBodyStream` property of `request`. + */ +@property (nonatomic, strong) NSInputStream *inputStream; + +/** + The output stream that is used to write data received until the request is finished. + + By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set. + */ +@property (nonatomic, strong) NSOutputStream *outputStream; + +///--------------------------------- +/// @name Managing Callback Queues +///--------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign) dispatch_group_t completionGroup; +#endif + +///--------------------------------------------- +/// @name Managing Request Operation Information +///--------------------------------------------- + +/** + The user info dictionary for the receiver. + */ +@property (nonatomic, strong) NSDictionary *userInfo; + +///------------------------------------------------------ +/// @name Initializing an AFURLConnectionOperation Object +///------------------------------------------------------ + +/** + Initializes and returns a newly allocated operation object with a url connection configured with the specified url request. + + This is the designated initializer. + + @param urlRequest The request object to be used by the operation connection. + */ +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest NS_DESIGNATED_INITIALIZER; + +///---------------------------------- +/// @name Pausing / Resuming Requests +///---------------------------------- + +/** + Pauses the execution of the request operation. + + A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect. + */ +- (void)pause; + +/** + Whether the request operation is currently paused. + + @return `YES` if the operation is currently paused, otherwise `NO`. + */ +- (BOOL)isPaused; + +/** + Resumes the execution of the paused request operation. + + Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request. + */ +- (void)resume; + +///---------------------------------------------- +/// @name Configuring Backgrounding Task Behavior +///---------------------------------------------- + +/** + Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task. + + @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified. + */ +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler; +#endif + +///--------------------------------- +/// @name Setting Progress Callbacks +///--------------------------------- + +/** + Sets a callback to be called when an undetermined number of bytes have been uploaded to the server. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block; + +/** + Sets a callback to be called when an undetermined number of bytes have been downloaded from the server. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; + +///------------------------------------------------- +/// @name Setting NSURLConnection Delegate Callbacks +///------------------------------------------------- + +/** + Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`. + + @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol). + + If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates. + */ +- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block; + +/** + Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`. + + @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect. + */ +- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block; + + +/** + Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`. + + @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request. + */ +- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block; + +/// + +/** + + */ ++ (NSArray *)batchOfRequestOperations:(NSArray *)operations + progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(void (^)(NSArray *operations))completionBlock; + +@end + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when an operation begins executing. + */ +extern NSString * const AFNetworkingOperationDidStartNotification; + +/** + Posted when an operation finishes. + */ +extern NSString * const AFNetworkingOperationDidFinishNotification; diff --git a/AFNetworking-master/AFNetworking/AFURLConnectionOperation.m b/AFNetworking-master/AFNetworking/AFURLConnectionOperation.m new file mode 100755 index 0000000..8d32092 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLConnectionOperation.m @@ -0,0 +1,788 @@ +// AFURLConnectionOperation.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLConnectionOperation.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +#if !__has_feature(objc_arc) +#error AFNetworking must be built with ARC. +// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files. +#endif + +typedef NS_ENUM(NSInteger, AFOperationState) { + AFOperationPausedState = -1, + AFOperationReadyState = 1, + AFOperationExecutingState = 2, + AFOperationFinishedState = 3, +}; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) +typedef UIBackgroundTaskIdentifier AFBackgroundTaskIdentifier; +#else +typedef id AFBackgroundTaskIdentifier; +#endif + +static dispatch_group_t url_request_operation_completion_group() { + static dispatch_group_t af_url_request_operation_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_group = dispatch_group_create(); + }); + + return af_url_request_operation_completion_group; +} + +static dispatch_queue_t url_request_operation_completion_queue() { + static dispatch_queue_t af_url_request_operation_completion_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_request_operation_completion_queue = dispatch_queue_create("com.alamofire.networking.operation.queue", DISPATCH_QUEUE_CONCURRENT ); + }); + + return af_url_request_operation_completion_queue; +} + +static NSString * const kAFNetworkingLockName = @"com.alamofire.networking.operation.lock"; + +NSString * const AFNetworkingOperationDidStartNotification = @"com.alamofire.networking.operation.start"; +NSString * const AFNetworkingOperationDidFinishNotification = @"com.alamofire.networking.operation.finish"; + +typedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +typedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge); +typedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse); +typedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse); + +static inline NSString * AFKeyPathFromOperationState(AFOperationState state) { + switch (state) { + case AFOperationReadyState: + return @"isReady"; + case AFOperationExecutingState: + return @"isExecuting"; + case AFOperationFinishedState: + return @"isFinished"; + case AFOperationPausedState: + return @"isPaused"; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + return @"state"; +#pragma clang diagnostic pop + } + } +} + +static inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) { + switch (fromState) { + case AFOperationReadyState: + switch (toState) { + case AFOperationPausedState: + case AFOperationExecutingState: + return YES; + case AFOperationFinishedState: + return isCancelled; + default: + return NO; + } + case AFOperationExecutingState: + switch (toState) { + case AFOperationPausedState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + case AFOperationFinishedState: + return NO; + case AFOperationPausedState: + return toState == AFOperationReadyState; + default: { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" + switch (toState) { + case AFOperationPausedState: + case AFOperationReadyState: + case AFOperationExecutingState: + case AFOperationFinishedState: + return YES; + default: + return NO; + } + } +#pragma clang diagnostic pop + } +} + +@interface AFURLConnectionOperation () +@property (readwrite, nonatomic, assign) AFOperationState state; +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; +@property (readwrite, nonatomic, strong) NSURLConnection *connection; +@property (readwrite, nonatomic, strong) NSURLRequest *request; +@property (readwrite, nonatomic, strong) NSURLResponse *response; +@property (readwrite, nonatomic, strong) NSError *error; +@property (readwrite, nonatomic, strong) NSData *responseData; +@property (readwrite, nonatomic, copy) NSString *responseString; +@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding; +@property (readwrite, nonatomic, assign) long long totalBytesRead; +@property (readwrite, nonatomic, assign) AFBackgroundTaskIdentifier backgroundTaskIdentifier; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse; +@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse; + +- (void)operationDidStart; +- (void)finish; +- (void)cancelConnection; +@end + +@implementation AFURLConnectionOperation +@synthesize outputStream = _outputStream; + ++ (void)networkRequestThreadEntryPoint:(id)__unused object { + @autoreleasepool { + [[NSThread currentThread] setName:@"AFNetworking"]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; + [runLoop run]; + } +} + ++ (NSThread *)networkRequestThread { + static NSThread *_networkRequestThread = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; + [_networkRequestThread start]; + }); + + return _networkRequestThread; +} + +- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { + NSParameterAssert(urlRequest); + + self = [super init]; + if (!self) { + return nil; + } + + _state = AFOperationReadyState; + + self.lock = [[NSRecursiveLock alloc] init]; + self.lock.name = kAFNetworkingLockName; + + self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes]; + + self.request = urlRequest; + + self.shouldUseCredentialStorage = YES; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + return self; +} + +- (void)dealloc { + if (_outputStream) { + [_outputStream close]; + _outputStream = nil; + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) + if (_backgroundTaskIdentifier) { + [[UIApplication sharedApplication] endBackgroundTask:_backgroundTaskIdentifier]; + _backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } +#endif +} + +#pragma mark - + +- (void)setResponseData:(NSData *)responseData { + [self.lock lock]; + if (!responseData) { + _responseData = nil; + } else { + _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length]; + } + [self.lock unlock]; +} + +- (NSString *)responseString { + [self.lock lock]; + if (!_responseString && self.response && self.responseData) { + self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding]; + } + [self.lock unlock]; + + return _responseString; +} + +- (NSStringEncoding)responseStringEncoding { + [self.lock lock]; + if (!_responseStringEncoding && self.response) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (self.response.textEncodingName) { + CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName); + if (IANAEncoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding); + } + } + + self.responseStringEncoding = stringEncoding; + } + [self.lock unlock]; + + return _responseStringEncoding; +} + +- (NSInputStream *)inputStream { + return self.request.HTTPBodyStream; +} + +- (void)setInputStream:(NSInputStream *)inputStream { + NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; + mutableRequest.HTTPBodyStream = inputStream; + self.request = mutableRequest; +} + +- (NSOutputStream *)outputStream { + if (!_outputStream) { + self.outputStream = [NSOutputStream outputStreamToMemory]; + } + + return _outputStream; +} + +- (void)setOutputStream:(NSOutputStream *)outputStream { + [self.lock lock]; + if (outputStream != _outputStream) { + if (_outputStream) { + [_outputStream close]; + } + + _outputStream = outputStream; + } + [self.lock unlock]; +} + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) +- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler { + [self.lock lock]; + if (!self.backgroundTaskIdentifier) { + UIApplication *application = [UIApplication sharedApplication]; + __weak __typeof(self)weakSelf = self; + self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ + __strong __typeof(weakSelf)strongSelf = weakSelf; + + if (handler) { + handler(); + } + + if (strongSelf) { + [strongSelf cancel]; + + [application endBackgroundTask:strongSelf.backgroundTaskIdentifier]; + strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + }]; + } + [self.lock unlock]; +} +#endif + +#pragma mark - + +- (void)setState:(AFOperationState)state { + if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) { + return; + } + + [self.lock lock]; + NSString *oldStateKey = AFKeyPathFromOperationState(self.state); + NSString *newStateKey = AFKeyPathFromOperationState(state); + + [self willChangeValueForKey:newStateKey]; + [self willChangeValueForKey:oldStateKey]; + _state = state; + [self didChangeValueForKey:oldStateKey]; + [self didChangeValueForKey:newStateKey]; + [self.lock unlock]; +} + +- (void)pause { + if ([self isPaused] || [self isFinished] || [self isCancelled]) { + return; + } + + [self.lock lock]; + if ([self isExecuting]) { + [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); + } + + self.state = AFOperationPausedState; + [self.lock unlock]; +} + +- (void)operationDidPause { + [self.lock lock]; + [self.connection cancel]; + [self.lock unlock]; +} + +- (BOOL)isPaused { + return self.state == AFOperationPausedState; +} + +- (void)resume { + if (![self isPaused]) { + return; + } + + [self.lock lock]; + self.state = AFOperationReadyState; + + [self start]; + [self.lock unlock]; +} + +#pragma mark - + +- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block { + self.uploadProgress = block; +} + +- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block { + self.downloadProgress = block; +} + +- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block { + self.authenticationChallenge = block; +} + +- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block { + self.cacheResponse = block; +} + +- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block { + self.redirectResponse = block; +} + +#pragma mark - NSOperation + +- (void)setCompletionBlock:(void (^)(void))block { + [self.lock lock]; + if (!block) { + [super setCompletionBlock:nil]; + } else { + __weak __typeof(self)weakSelf = self; + [super setCompletionBlock:^ { + __strong __typeof(weakSelf)strongSelf = weakSelf; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group(); + dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + + dispatch_group_async(group, queue, ^{ + block(); + }); + + dispatch_group_notify(group, url_request_operation_completion_queue(), ^{ + [strongSelf setCompletionBlock:nil]; + }); + }]; + } + [self.lock unlock]; +} + +- (BOOL)isReady { + return self.state == AFOperationReadyState && [super isReady]; +} + +- (BOOL)isExecuting { + return self.state == AFOperationExecutingState; +} + +- (BOOL)isFinished { + return self.state == AFOperationFinishedState; +} + +- (BOOL)isConcurrent { + return YES; +} + +- (void)start { + [self.lock lock]; + if ([self isCancelled]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } else if ([self isReady]) { + self.state = AFOperationExecutingState; + + [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + [self.lock unlock]; +} + +- (void)operationDidStart { + [self.lock lock]; + if (![self isCancelled]) { + self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; + + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + for (NSString *runLoopMode in self.runLoopModes) { + [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode]; + [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode]; + } + + [self.outputStream open]; + [self.connection start]; + } + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self]; + }); +} + +- (void)finish { + [self.lock lock]; + self.state = AFOperationFinishedState; + [self.lock unlock]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; + }); +} + +- (void)cancel { + [self.lock lock]; + if (![self isFinished] && ![self isCancelled]) { + [super cancel]; + + if ([self isExecuting]) { + [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; + } + } + [self.lock unlock]; +} + +- (void)cancelConnection { + NSDictionary *userInfo = nil; + if ([self.request URL]) { + userInfo = [NSDictionary dictionaryWithObject:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; + } + NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; + + if (![self isFinished]) { + if (self.connection) { + [self.connection cancel]; + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error]; + } else { + // Accomodate race condition where `self.connection` has not yet been set before cancellation + self.error = error; + [self finish]; + } + } +} + +#pragma mark - + ++ (NSArray *)batchOfRequestOperations:(NSArray *)operations + progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock + completionBlock:(void (^)(NSArray *operations))completionBlock +{ + if (!operations || [operations count] == 0) { + return @[[NSBlockOperation blockOperationWithBlock:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(@[]); + } + }); + }]]; + } + + __block dispatch_group_t group = dispatch_group_create(); + NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{ + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + if (completionBlock) { + completionBlock(operations); + } + }); + }]; + + for (AFURLConnectionOperation *operation in operations) { + operation.completionGroup = group; + void (^originalCompletionBlock)(void) = [operation.completionBlock copy]; + __weak __typeof(operation)weakOperation = operation; + operation.completionBlock = ^{ + __strong __typeof(weakOperation)strongOperation = weakOperation; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue(); +#pragma clang diagnostic pop + dispatch_group_async(group, queue, ^{ + if (originalCompletionBlock) { + originalCompletionBlock(); + } + + NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx, BOOL __unused *stop) { + return [op isFinished]; + }] count]; + + if (progressBlock) { + progressBlock(numberOfFinishedOperations, [operations count]); + } + + dispatch_group_leave(group); + }); + }; + + dispatch_group_enter(group); + [batchedOperation addDependency:operation]; + } + + return [operations arrayByAddingObject:batchedOperation]; +} + +#pragma mark - NSObject + +- (NSString *)description { + [self.lock lock]; + NSString *description = [NSString stringWithFormat:@"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @"YES" : @"NO"), self.request, self.response]; + [self.lock unlock]; + return description; +} + +#pragma mark - NSURLConnectionDelegate + +- (void)connection:(NSURLConnection *)connection +willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge +{ + if (self.authenticationChallenge) { + self.authenticationChallenge(connection, challenge); + return; + } + + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] cancelAuthenticationChallenge:challenge]; + } + } else { + if ([challenge previousFailureCount] == 0) { + if (self.credential) { + [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } else { + [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; + } + } +} + +- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { + return self.shouldUseCredentialStorage; +} + +- (NSURLRequest *)connection:(NSURLConnection *)connection + willSendRequest:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)redirectResponse +{ + if (self.redirectResponse) { + return self.redirectResponse(connection, request, redirectResponse); + } else { + return request; + } +} + +- (void)connection:(NSURLConnection __unused *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.uploadProgress) { + self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + }); +} + +- (void)connection:(NSURLConnection __unused *)connection +didReceiveResponse:(NSURLResponse *)response +{ + self.response = response; +} + +- (void)connection:(NSURLConnection __unused *)connection + didReceiveData:(NSData *)data +{ + NSUInteger length = [data length]; + while (YES) { + NSInteger totalNumberOfBytesWritten = 0; + if ([self.outputStream hasSpaceAvailable]) { + const uint8_t *dataBuffer = (uint8_t *)[data bytes]; + + NSInteger numberOfBytesWritten = 0; + while (totalNumberOfBytesWritten < (NSInteger)length) { + numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)]; + if (numberOfBytesWritten == -1) { + break; + } + + totalNumberOfBytesWritten += numberOfBytesWritten; + } + + break; + } + + if (self.outputStream.streamError) { + [self.connection cancel]; + [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError]; + return; + } + } + + dispatch_async(dispatch_get_main_queue(), ^{ + self.totalBytesRead += (long long)length; + + if (self.downloadProgress) { + self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength); + } + }); +} + +- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection { + self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (void)connection:(NSURLConnection __unused *)connection + didFailWithError:(NSError *)error +{ + self.error = error; + + [self.outputStream close]; + if (self.responseData) { + self.outputStream = nil; + } + + self.connection = nil; + + [self finish]; +} + +- (NSCachedURLResponse *)connection:(NSURLConnection *)connection + willCacheResponse:(NSCachedURLResponse *)cachedResponse +{ + if (self.cacheResponse) { + return self.cacheResponse(connection, cachedResponse); + } else { + if ([self isCancelled]) { + return nil; + } + + return cachedResponse; + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))]; + + self = [self initWithRequest:request]; + if (!self) { + return nil; + } + + self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue]; + self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))]; + self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))]; + self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))]; + self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [self pause]; + + [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))]; + + switch (self.state) { + case AFOperationExecutingState: + case AFOperationPausedState: + [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))]; + break; + default: + [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))]; + break; + } + + [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))]; + [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))]; + [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))]; + [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request]; + + operation.uploadProgress = self.uploadProgress; + operation.downloadProgress = self.downloadProgress; + operation.authenticationChallenge = self.authenticationChallenge; + operation.cacheResponse = self.cacheResponse; + operation.redirectResponse = self.redirectResponse; + operation.completionQueue = self.completionQueue; + operation.completionGroup = self.completionGroup; + + return operation; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFURLRequestSerialization.h b/AFNetworking-master/AFNetworking/AFURLRequestSerialization.h new file mode 100755 index 0000000..bb8d444 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1,467 @@ +// AFURLRequestSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#endif + +/** + The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + + For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + */ +@protocol AFURLRequestSerialization + +/** + Returns a request with the specified parameters encoded into a copy of the original request. + + @param request The original request. + @param parameters The parameters to be encoded. + @param error The error that occurred while attempting to encode the request parameters. + + @return A serialized request. + */ +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError * __autoreleasing *)error; + +@end + +#pragma mark - + +/** + + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; + +@protocol AFMultipartFormData; + +/** + `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Whether created requests can use the device’s cellular radio (if present). `YES` by default. + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + Whether created requests should use the default cookie handling. `YES` by default. + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** + Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** + The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name Configuring HTTP Request Headers +///--------------------------------------- + +/** + Default HTTP header field values to be applied to serialized requests. By default, these include the following: + + - `Accept-Language` with the contents of `NSLocale +preferredLanguages` + - `User-Agent` with the contents of various bundle identifiers and OS designations + + @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +/** + Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + + @param field The HTTP header to set a default value for + @param value The value set as default for the specified header, or `nil` + */ +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + Returns the value for the HTTP headers set in the request serializer. + + @param field The HTTP header to retrieve the default value for + + @return The value set as default for the specified header, or `nil` + */ +- (NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + + @param username The HTTP basic auth username + @param password The HTTP basic auth password + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead. + */ +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE; + + +/** + Clears any existing value for the "Authorization" HTTP header. + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name Configuring Query String Parameter Serialization +///------------------------------------------------------- + +/** + HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + Set the method of query string serialization according to one of the pre-defined styles. + + @param style The serialization style. + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + Set the a custom method of query string serialization according to the specified block. + + @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + */ +- (void)setQueryStringSerializationWithBlock:(NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name Creating Request Objects +///------------------------------- + +/** + @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + + If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + + @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. + @param error The error that occured while constructing the request. + + @return An `NSMutableURLRequest` object. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError * __autoreleasing *)error; + +/** + @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead. + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + + @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded and set in the request HTTP body. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param error The error that occured while constructing the request. + + @return An `NSMutableURLRequest` object + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError * __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + + @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. + @param fileURL The file URL to write multipart form contents to. + @param handler A handler block to execute. + + @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler; + +@end + +#pragma mark - + +/** + The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + */ +@protocol AFMultipartFormData + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + + The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended, otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. + @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + + @param inputStream The input stream to be appended to the form data + @param name The name to be associated with the specified input stream. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. + @param length The length of the specified input stream in bytes. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + Appends HTTP headers, followed by the encoded data and the multipart form boundary. + + @param headers The HTTP headers to be appended to the form data. + @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + */ +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body; + +/** + Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + + When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + + @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. + @param delay Duration of delay each time a packet is read. By default, no delay is set. + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end + +#pragma mark - + +/** + `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param writingOptions The specified JSON writing options. + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; + +@end + +#pragma mark - + +/** + `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning The `writeOptions` property is currently unused. + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end + +#pragma mark - + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLRequestSerializationErrorDomain` + + ### Constants + + `AFURLRequestSerializationErrorDomain` + AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +extern NSString * const AFURLRequestSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLRequestErrorKey` + The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. + */ +extern NSString * const AFNetworkingOperationFailingURLRequestErrorKey; + +/** + ## Throttling Bandwidth for HTTP Request Input Streams + + @see -throttleBandwidthWithPacketSize:delay: + + ### Constants + + `kAFUploadStream3GSuggestedPacketSize` + Maximum packet size, in number of bytes. Equal to 16kb. + + `kAFUploadStream3GSuggestedDelay` + Duration of delay each time a packet is read. Equal to 0.2 seconds. + */ +extern NSUInteger const kAFUploadStream3GSuggestedPacketSize; +extern NSTimeInterval const kAFUploadStream3GSuggestedDelay; diff --git a/AFNetworking-master/AFNetworking/AFURLRequestSerialization.m b/AFNetworking-master/AFNetworking/AFURLRequestSerialization.m new file mode 100755 index 0000000..5b55b5f --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLRequestSerialization.m @@ -0,0 +1,1384 @@ +// AFURLRequestSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLRequestSerialization.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED +#import +#else +#import +#endif + +NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; +NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; + +typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); + +static NSString * AFBase64EncodedStringFromString(NSString *string) { + NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; + NSUInteger length = [data length]; + NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; + + uint8_t *input = (uint8_t *)[data bytes]; + uint8_t *output = (uint8_t *)[mutableData mutableBytes]; + + for (NSUInteger i = 0; i < length; i += 3) { + NSUInteger value = 0; + for (NSUInteger j = i; j < (i + 3); j++) { + value <<= 8; + if (j < length) { + value |= (0xFF & input[j]); + } + } + + static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + NSUInteger idx = (i / 3) * 4; + output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; + output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; + output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; + output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; + } + + return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; +} + +static NSString * const kAFCharactersToBeEscapedInQueryString = @":/?&=;+!@#$()',*"; + +static NSString * AFPercentEscapedQueryStringKeyFromStringWithEncoding(NSString *string, NSStringEncoding encoding) { + static NSString * const kAFCharactersToLeaveUnescapedInQueryStringPairKey = @"[]."; + + return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kAFCharactersToLeaveUnescapedInQueryStringPairKey, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding)); +} + +static NSString * AFPercentEscapedQueryStringValueFromStringWithEncoding(NSString *string, NSStringEncoding encoding) { + return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, (__bridge CFStringRef)kAFCharactersToBeEscapedInQueryString, CFStringConvertNSStringEncodingToEncoding(encoding)); +} + +#pragma mark - + +@interface AFQueryStringPair : NSObject +@property (readwrite, nonatomic, strong) id field; +@property (readwrite, nonatomic, strong) id value; + +- (id)initWithField:(id)field value:(id)value; + +- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding; +@end + +@implementation AFQueryStringPair + +- (id)initWithField:(id)field value:(id)value { + self = [super init]; + if (!self) { + return nil; + } + + self.field = field; + self.value = value; + + return self; +} + +- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding { + if (!self.value || [self.value isEqual:[NSNull null]]) { + return AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding); + } else { + return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedQueryStringKeyFromStringWithEncoding([self.field description], stringEncoding), AFPercentEscapedQueryStringValueFromStringWithEncoding([self.value description], stringEncoding)]; + } +} + +@end + +#pragma mark - + +extern NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); +extern NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); + +static NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) { + NSMutableArray *mutablePairs = [NSMutableArray array]; + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + [mutablePairs addObject:[pair URLEncodedStringValueWithEncoding:stringEncoding]]; + } + + return [mutablePairs componentsJoinedByString:@"&"]; +} + +NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { + return AFQueryStringPairsFromKeyAndValue(nil, dictionary); +} + +NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { + NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + id nestedValue = [dictionary objectForKey:nestedKey]; + if (nestedValue) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; + } + } + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = value; + for (id nestedValue in array) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } + } else if ([value isKindOfClass:[NSSet class]]) { + NSSet *set = value; + for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; + } + } else { + [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; + } + + return mutableQueryStringComponents; +} + +#pragma mark - + +@interface AFStreamingMultipartFormData : NSObject +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; +@end + +#pragma mark - + +static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { + static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; + }); + + return _AFHTTPRequestSerializerObservedKeyPaths; +} + +static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; + +@interface AFHTTPRequestSerializer () +@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; +@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; +@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; +@end + +@implementation AFHTTPRequestSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; + + // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; + [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + float q = 1.0f - (idx * 0.1f); + [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; + *stop = q <= 0.5f; + }]; + [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; + + NSString *userAgent = nil; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; +#endif +#pragma clang diagnostic pop + if (userAgent) { + if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { + NSMutableString *mutableUserAgent = [userAgent mutableCopy]; + if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { + userAgent = mutableUserAgent; + } + } + [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; + + self.mutableObservedChangedKeyPaths = [NSMutableSet set]; + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; + } + } + + return self; +} + +- (void)dealloc { + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; + } + } +} + +#pragma mark - + +// Workarounds for crashing behavior using Key-Value Observing with XCTest +// See https://github.com/AFNetworking/AFNetworking/issues/2523 + +- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { + [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; + _allowsCellularAccess = allowsCellularAccess; + [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; +} + +- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { + [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; + _cachePolicy = cachePolicy; + [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; +} + +- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; + _HTTPShouldHandleCookies = HTTPShouldHandleCookies; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; +} + +- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; + _HTTPShouldUsePipelining = HTTPShouldUsePipelining; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; +} + +- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { + [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; + _networkServiceType = networkServiceType; + [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; +} + +- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { + [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; + _timeoutInterval = timeoutInterval; + [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; +} + +#pragma mark - + +- (NSDictionary *)HTTPRequestHeaders { + return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; +} + +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field +{ + [self.mutableHTTPRequestHeaders setValue:value forKey:field]; +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return [self.mutableHTTPRequestHeaders valueForKey:field]; +} + +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password +{ + NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", username, password]; + [self setValue:[NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@"Authorization"]; +} + +- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token { + [self setValue:[NSString stringWithFormat:@"Token token=\"%@\"", token] forHTTPHeaderField:@"Authorization"]; +} + +- (void)clearAuthorizationHeader { + [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; +} + +#pragma mark - + +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { + self.queryStringSerializationStyle = style; + self.queryStringSerialization = nil; +} + +- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { + self.queryStringSerialization = block; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters +{ + return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil]; +} + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(URLString); + + NSURL *url = [NSURL URLWithString:URLString]; + + NSParameterAssert(url); + + NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; + mutableRequest.HTTPMethod = method; + + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { + [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; + } + } + + mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; + + return mutableRequest; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block +{ + return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil]; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); + + NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; + + __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; + + if (parameters) { + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + NSData *data = nil; + if ([pair.value isKindOfClass:[NSData class]]) { + data = pair.value; + } else if ([pair.value isEqual:[NSNull null]]) { + data = [NSData data]; + } else { + data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; + } + + if (data) { + [formData appendPartWithFormData:data name:[pair.field description]]; + } + } + } + + if (block) { + block(formData); + } + + return [formData requestByFinalizingMultipartFormData]; +} + +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler +{ + NSParameterAssert(request.HTTPBodyStream); + NSParameterAssert([fileURL isFileURL]); + + NSInputStream *inputStream = request.HTTPBodyStream; + NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; + __block NSError *error = nil; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + + [inputStream open]; + [outputStream open]; + + while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { + uint8_t buffer[1024]; + + NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; + if (inputStream.streamError || bytesRead < 0) { + error = inputStream.streamError; + break; + } + + NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; + if (outputStream.streamError || bytesWritten < 0) { + error = outputStream.streamError; + break; + } + + if (bytesRead == 0 && bytesWritten == 0) { + break; + } + } + + [outputStream close]; + [inputStream close]; + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.HTTPBodyStream = nil; + + return mutableRequest; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + NSString *query = nil; + if (self.queryStringSerialization) { + NSError *serializationError; + query = self.queryStringSerialization(request, parameters, &serializationError); + + if (serializationError) { + if (error) { + *error = serializationError; + } + + return nil; + } + } else { + switch (self.queryStringSerializationStyle) { + case AFHTTPRequestQueryStringDefaultStyle: + query = AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding); + break; + } + } + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; + } else { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + } + [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; + } + } + + return mutableRequest; +} + +#pragma mark - NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { + return NO; + } + + return [super automaticallyNotifiesObserversForKey:key]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(__unused id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == AFHTTPRequestSerializerObserverContext) { + if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { + [self.mutableObservedChangedKeyPaths removeObject:keyPath]; + } else { + [self.mutableObservedChangedKeyPaths addObject:keyPath]; + } + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; + self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; + [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; + serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; + serializer.queryStringSerialization = self.queryStringSerialization; + + return serializer; +} + +@end + +#pragma mark - + +static NSString * AFCreateMultipartFormBoundary() { + return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; +} + +static NSString * const kAFMultipartFormCRLF = @"\r\n"; + +static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFContentTypeForPathExtension(NSString *extension) { +#ifdef __UTTYPE__ + NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); + NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); + if (!contentType) { + return @"application/octet-stream"; + } else { + return contentType; + } +#else +#pragma unused (extension) + return @"application/octet-stream"; +#endif +} + +NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; +NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) unsigned long long bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; + +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; + +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) unsigned long long contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@interface AFMultipartBodyStream : NSInputStream +@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; +@property (nonatomic, assign) NSTimeInterval delay; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (readonly, nonatomic, assign) unsigned long long contentLength; +@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; + +- (id)initWithStringEncoding:(NSStringEncoding)encoding; +- (void)setInitialAndFinalBoundaries; +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; +@end + +#pragma mark - + +@interface AFStreamingMultipartFormData () +@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, copy) NSString *boundary; +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; +@end + +@implementation AFStreamingMultipartFormData + +- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding +{ + self = [super init]; + if (!self) { + return nil; + } + + self.request = urlRequest; + self.stringEncoding = encoding; + self.boundary = AFCreateMultipartFormBoundary(); + self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; + + return self; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + + NSString *fileName = [fileURL lastPathComponent]; + NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); + + return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + if (![fileURL isFileURL]) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; + if (!fileAttributes) { + return NO; + } + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = fileURL; + bodyPart.bodyContentLength = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; + [self.bodyStream appendHTTPBodyPart:bodyPart]; + + return YES; +} + +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = inputStream; + + bodyPart.bodyContentLength = (unsigned long long)length; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name +{ + NSParameterAssert(name); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body +{ + NSParameterAssert(body); + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = headers; + bodyPart.boundary = self.boundary; + bodyPart.bodyContentLength = [body length]; + bodyPart.body = body; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay +{ + self.bodyStream.numberOfBytesInPacket = numberOfBytes; + self.bodyStream.delay = delay; +} + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { + if ([self.bodyStream isEmpty]) { + return self.request; + } + + // Reset the initial and final boundaries to ensure correct Content-Length + [self.bodyStream setInitialAndFinalBoundaries]; + [self.request setHTTPBodyStream:self.bodyStream]; + + [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; + [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; + + return self.request; +} + +@end + +#pragma mark - + +@interface NSStream () +@property (readwrite) NSStreamStatus streamStatus; +@property (readwrite, copy) NSError *streamError; +@end + +@interface AFMultipartBodyStream () +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; +@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; +@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; +@property (readwrite, nonatomic, strong) NSMutableData *buffer; +@end + +@implementation AFMultipartBodyStream +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) +@synthesize delegate; +#endif +@synthesize streamStatus; +@synthesize streamError; +#pragma clang diagnostic pop + +- (id)initWithStringEncoding:(NSStringEncoding)encoding { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = encoding; + self.HTTPBodyParts = [NSMutableArray array]; + self.numberOfBytesInPacket = NSIntegerMax; + + return self; +} + +- (void)setInitialAndFinalBoundaries { + if ([self.HTTPBodyParts count] > 0) { + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + bodyPart.hasInitialBoundary = NO; + bodyPart.hasFinalBoundary = NO; + } + + [[self.HTTPBodyParts objectAtIndex:0] setHasInitialBoundary:YES]; + [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; + } +} + +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { + [self.HTTPBodyParts addObject:bodyPart]; +} + +- (BOOL)isEmpty { + return [self.HTTPBodyParts count] == 0; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + if ([self streamStatus] == NSStreamStatusClosed) { + return 0; + } + + NSInteger totalNumberOfBytesRead = 0; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { + if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { + if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { + break; + } + } else { + NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead; + NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; + if (numberOfBytesRead == -1) { + self.streamError = self.currentHTTPBodyPart.inputStream.streamError; + break; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if (self.delay > 0.0f) { + [NSThread sleepForTimeInterval:self.delay]; + } + } + } + } +#pragma clang diagnostic pop + + return totalNumberOfBytesRead; +} + +- (BOOL)getBuffer:(__unused uint8_t **)buffer + length:(__unused NSUInteger *)len +{ + return NO; +} + +- (BOOL)hasBytesAvailable { + return [self streamStatus] == NSStreamStatusOpen; +} + +#pragma mark - NSStream + +- (void)open { + if (self.streamStatus == NSStreamStatusOpen) { + return; + } + + self.streamStatus = NSStreamStatusOpen; + + [self setInitialAndFinalBoundaries]; + self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; +} + +- (void)close { + self.streamStatus = NSStreamStatusClosed; +} + +- (id)propertyForKey:(__unused NSString *)key { + return nil; +} + +- (BOOL)setProperty:(__unused id)property + forKey:(__unused NSString *)key +{ + return NO; +} + +- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + length += [bodyPart contentLength]; + } + + return length; +} + +#pragma mark - Undocumented CFReadStream Bridged Methods + +- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags + callback:(__unused CFReadStreamClientCallBack)inCallback + context:(__unused CFStreamClientContext *)inContext { + return NO; +} + +#pragma mark - NSCopying + +-(id)copyWithZone:(NSZone *)zone { + AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; + + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; + } + + [bodyStreamCopy setInitialAndFinalBoundaries]; + + return bodyStreamCopy; +} + +@end + +#pragma mark - + +typedef enum { + AFEncapsulationBoundaryPhase = 1, + AFHeaderPhase = 2, + AFBodyPhase = 3, + AFFinalBoundaryPhase = 4, +} AFHTTPBodyPartReadPhase; + +@interface AFHTTPBodyPart () { + AFHTTPBodyPartReadPhase _phase; + NSInputStream *_inputStream; + unsigned long long _phaseReadOffset; +} + +- (BOOL)transitionToNextPhase; +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@implementation AFHTTPBodyPart + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [self transitionToNextPhase]; + + return self; +} + +- (void)dealloc { + if (_inputStream) { + [_inputStream close]; + _inputStream = nil; + } +} + +- (NSInputStream *)inputStream { + if (!_inputStream) { + if ([self.body isKindOfClass:[NSData class]]) { + _inputStream = [NSInputStream inputStreamWithData:self.body]; + } else if ([self.body isKindOfClass:[NSURL class]]) { + _inputStream = [NSInputStream inputStreamWithURL:self.body]; + } else if ([self.body isKindOfClass:[NSInputStream class]]) { + _inputStream = self.body; + } else { + _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; + } + } + + return _inputStream; +} + +- (NSString *)stringForHeaders { + NSMutableString *headerString = [NSMutableString string]; + for (NSString *field in [self.headers allKeys]) { + [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; + } + [headerString appendString:kAFMultipartFormCRLF]; + + return [NSString stringWithString:headerString]; +} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + length += [encapsulationBoundaryData length]; + + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + length += [headersData length]; + + length += _bodyContentLength; + + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + length += [closingBoundaryData length]; + + return length; +} + +- (BOOL)hasBytesAvailable { + // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer + if (_phase == AFFinalBoundaryPhase) { + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (self.inputStream.streamStatus) { + case NSStreamStatusNotOpen: + case NSStreamStatusOpening: + case NSStreamStatusOpen: + case NSStreamStatusReading: + case NSStreamStatusWriting: + return YES; + case NSStreamStatusAtEnd: + case NSStreamStatusClosed: + case NSStreamStatusError: + default: + return NO; + } +#pragma clang diagnostic pop +} + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSInteger totalNumberOfBytesRead = 0; + + if (_phase == AFEncapsulationBoundaryPhase) { + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFHeaderPhase) { + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFBodyPhase) { + NSInteger numberOfBytesRead = 0; + + numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + if (numberOfBytesRead == -1) { + return -1; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { + [self transitionToNextPhase]; + } + } + } + + if (_phase == AFFinalBoundaryPhase) { + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + return totalNumberOfBytesRead; +} + +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); + [data getBytes:buffer range:range]; +#pragma clang diagnostic pop + + _phaseReadOffset += range.length; + + if (((NSUInteger)_phaseReadOffset) >= [data length]) { + [self transitionToNextPhase]; + } + + return (NSInteger)range.length; +} + +- (BOOL)transitionToNextPhase { + if (![[NSThread currentThread] isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self transitionToNextPhase]; + }); + return YES; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" + switch (_phase) { + case AFEncapsulationBoundaryPhase: + _phase = AFHeaderPhase; + break; + case AFHeaderPhase: + [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + [self.inputStream open]; + _phase = AFBodyPhase; + break; + case AFBodyPhase: + [self.inputStream close]; + _phase = AFFinalBoundaryPhase; + break; + case AFFinalBoundaryPhase: + default: + _phase = AFEncapsulationBoundaryPhase; + break; + } + _phaseReadOffset = 0; +#pragma clang diagnostic pop + + return YES; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; + + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = self.headers; + bodyPart.bodyContentLength = self.bodyContentLength; + bodyPart.body = self.body; + bodyPart.boundary = self.boundary; + + return bodyPart; +} + +@end + +#pragma mark - + +@implementation AFJSONRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; +} + ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions +{ + AFJSONRequestSerializer *serializer = [[self alloc] init]; + serializer.writingOptions = writingOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.writingOptions = self.writingOptions; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFPropertyListRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions +{ + AFPropertyListRequestSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.writeOptions = writeOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerializer + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.format = self.format; + serializer.writeOptions = self.writeOptions; + + return serializer; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFURLResponseSerialization.h b/AFNetworking-master/AFNetworking/AFURLResponseSerialization.h new file mode 100755 index 0000000..9cd4ad2 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1,309 @@ +// AFURLResponseSerialization.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import + +/** + The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. + + For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. + */ +@protocol AFURLResponseSerialization + +/** + The response object decoded from the data associated with a specified response. + + @param response The response to be processed. + @param data The response data to be decoded. + @param error The error that occurred while attempting to decode the response data. + + @return The object decoded from the specified response data. + */ +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error; + +@end + +#pragma mark - + +/** + `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPResponseSerializer : NSObject + +- (instancetype) init; + +/** + The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +///----------------------------------------- +/// @name Configuring Response Serialization +///----------------------------------------- + +/** + The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. + + See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + */ +@property (nonatomic, copy) NSIndexSet *acceptableStatusCodes; + +/** + The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. + */ +@property (nonatomic, copy) NSSet *acceptableContentTypes; + +/** + Validates the specified response and data. + + In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. + + @param response The response to be validated. + @param data The data associated with the response. + @param error The error that occurred while attempting to validate the response. + + @return `YES` if the response is valid, otherwise `NO`. + */ +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error; + +@end + +#pragma mark - + + +/** + `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. + + By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: + + - `application/json` + - `text/json` + - `text/javascript` + */ +@interface AFJSONResponseSerializer : AFHTTPResponseSerializer + +- (instancetype) init; + +/** + Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONReadingOptions readingOptions; + +/** + Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL removesKeysWithNullValues; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param readingOptions The specified JSON reading options. + */ ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; + +@end + +#pragma mark - + +/** + `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. + + By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +/** + `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer + +- (instancetype) init; + +/** + Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSUInteger options; + +/** + Creates and returns an XML document serializer with the specified options. + + @param mask The XML document options. + */ ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; + +@end + +#endif + +#pragma mark - + +/** + `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFPropertyListResponseSerializer` accepts the following MIME types: + + - `application/x-plist` + */ +@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer + +- (instancetype) init; + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." + */ +@property (nonatomic, assign) NSPropertyListReadOptions readOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param readOptions The property list reading options. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions; + +@end + +#pragma mark - + +/** + `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. + + By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: + + - `image/tiff` + - `image/jpeg` + - `image/gif` + - `image/png` + - `image/ico` + - `image/x-icon` + - `image/bmp` + - `image/x-bmp` + - `image/x-xbitmap` + - `image/x-win-bitmap` + */ +@interface AFImageResponseSerializer : AFHTTPResponseSerializer + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +/** + The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. + */ +@property (nonatomic, assign) CGFloat imageScale; + +/** + Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. + */ +@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; +#endif + +@end + +#pragma mark - + +/** + `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. + */ +@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer + +/** + The component response serializers. + */ +@property (readonly, nonatomic, copy) NSArray *responseSerializers; + +/** + Creates and returns a compound serializer comprised of the specified response serializers. + + @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. + */ ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLResponseSerializationErrorDomain` + + ### Constants + + `AFURLResponseSerializationErrorDomain` + AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +extern NSString * const AFURLResponseSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` + - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLResponseErrorKey` + The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + + `AFNetworkingOperationFailingURLResponseDataErrorKey` + The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + */ +extern NSString * const AFNetworkingOperationFailingURLResponseErrorKey; + +extern NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; + + diff --git a/AFNetworking-master/AFNetworking/AFURLResponseSerialization.m b/AFNetworking-master/AFNetworking/AFURLResponseSerialization.m new file mode 100755 index 0000000..a672d20 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLResponseSerialization.m @@ -0,0 +1,797 @@ +// AFURLResponseSerialization.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLResponseSerialization.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#import +#endif + +NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; +NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; +NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; + +static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { + if (!error) { + return underlyingError; + } + + if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { + return error; + } + + NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; + mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; + + return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; +} + +static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { + if ([error.domain isEqualToString:domain] && error.code == code) { + return YES; + } else if (error.userInfo[NSUnderlyingErrorKey]) { + return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); + } + + return NO; +} + +static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { + if ([JSONObject isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; + for (id value in (NSArray *)JSONObject) { + [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; + } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; + for (id key in [(NSDictionary *)JSONObject allKeys]) { + id value = [(NSDictionary *)JSONObject objectForKey:key]; + if (!value || [value isEqual:[NSNull null]]) { + [mutableDictionary removeObjectForKey:key]; + } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { + [mutableDictionary setObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions) forKey:key]; + } + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } + + return JSONObject; +} + +@implementation AFHTTPResponseSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + self.acceptableContentTypes = nil; + + return self; +} + +#pragma mark - + +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError * __autoreleasing *)error +{ + BOOL responseIsValid = YES; + NSError *validationError = nil; + + if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { + if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { + if ([data length] > 0 && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); + } + + responseIsValid = NO; + } + + if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); + + responseIsValid = NO; + } + } + + if (error && !responseIsValid) { + *error = validationError; + } + + return responseIsValid; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; + + return data; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; + serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFJSONResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; +} + ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { + AFJSONResponseSerializer *serializer = [[self alloc] init]; + serializer.readingOptions = readingOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. + // See https://github.com/rails/rails/issues/1742 + NSStringEncoding stringEncoding = self.stringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + id responseObject = nil; + NSError *serializationError = nil; + @autoreleasepool { + NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (responseString && ![responseString isEqualToString:@" "]) { + // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character + // See http://stackoverflow.com/a/12843465/157142 + data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; + + if (data) { + if ([data length] > 0) { + responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; + } else { + return nil; + } + } else { + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@"Data failed decoding as a UTF-8 string", @"AFNetworking", nil), + NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Could not decode string: %@", @"AFNetworking", nil), responseString] + }; + + serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo]; + } + } + } + + if (self.removesKeysWithNullValues && responseObject) { + responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; + self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; + [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.readingOptions = self.readingOptions; + serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFXMLParserResponseSerializer + ++ (instancetype)serializer { + AFXMLParserResponseSerializer *serializer = [[self alloc] init]; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + return [[NSXMLParser alloc] initWithData:data]; +} + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +@implementation AFXMLDocumentResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithXMLDocumentOptions:0]; +} + ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { + AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; + serializer.options = mask; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + NSError *serializationError = nil; + NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return document; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.options = self.options; + + return serializer; +} + +@end + +#endif + +#pragma mark - + +@implementation AFPropertyListResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions +{ + AFPropertyListResponseSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.readOptions = readOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject; + NSError *serializationError = nil; + + if (data) { + responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.format = self.format; + serializer.readOptions = self.readOptions; + + return serializer; +} + +@end + +#pragma mark - + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import + +static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { + UIImage *image = [[UIImage alloc] initWithData:data]; + if (image.images) { + return image; + } + + return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; +} + +static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { + if (!data || [data length] == 0) { + return nil; + } + + CGImageRef imageRef = NULL; + CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + + if ([response.MIMEType isEqualToString:@"image/png"]) { + imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { + imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + + if (imageRef) { + CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); + + // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale + if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { + CGImageRelease(imageRef); + imageRef = NULL; + } + } + } + + CGDataProviderRelease(dataProvider); + + UIImage *image = AFImageWithDataAtScale(data, scale); + if (!imageRef) { + if (image.images || !image) { + return image; + } + + imageRef = CGImageCreateCopy([image CGImage]); + if (!imageRef) { + return nil; + } + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + if (width * height > 1024 * 1024 || bitsPerComponent > 8) { + CGImageRelease(imageRef); + + return image; + } + + // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate + size_t bytesPerRow = 0; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + + if (colorSpaceModel == kCGColorSpaceModelRGB) { + uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wassign-enum" + if (alpha == kCGImageAlphaNone) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaNoneSkipFirst; + } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } +#pragma clang diagnostic pop + } + + CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); + + CGColorSpaceRelease(colorSpace); + + if (!context) { + CGImageRelease(imageRef); + + return image; + } + + CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); + CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); + + CGContextRelease(context); + + UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; + + CGImageRelease(inflatedImageRef); + CGImageRelease(imageRef); + + return inflatedImage; +} +#endif + + +@implementation AFImageResponseSerializer + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + self.imageScale = [[UIScreen mainScreen] scale]; + self.automaticallyInflatesResponseImage = YES; +#endif + + return self; +} + +#pragma mark - AFURLResponseSerializer + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + if (self.automaticallyInflatesResponseImage) { + return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); + } else { + return AFImageWithDataAtScale(data, self.imageScale); + } +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + // Ensure that the image is set to it's correct pixel width and height + NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; + [image addRepresentation:bitimage]; + + return image; +#endif + + return nil; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; +#if CGFLOAT_IS_DOUBLE + self.imageScale = [imageScale doubleValue]; +#else + self.imageScale = [imageScale floatValue]; +#endif + + self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; + [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + serializer.imageScale = self.imageScale; + serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; +#endif + + return serializer; +} + +@end + +#pragma mark - + +@interface AFCompoundResponseSerializer () +@property (readwrite, nonatomic, copy) NSArray *responseSerializers; +@end + +@implementation AFCompoundResponseSerializer + ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { + AFCompoundResponseSerializer *serializer = [[self alloc] init]; + serializer.responseSerializers = responseSerializers; + + return serializer; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + for (id serializer in self.responseSerializers) { + if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { + continue; + } + + NSError *serializerError = nil; + id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; + if (responseObject) { + if (error) { + *error = AFErrorWithUnderlyingError(serializerError, *error); + } + + return responseObject; + } + } + + return [super responseObjectForResponse:response data:data error:error]; +} + +#pragma mark - NSSecureCoding + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.responseSerializers = self.responseSerializers; + + return serializer; +} + +@end diff --git a/AFNetworking-master/AFNetworking/AFURLSessionManager.h b/AFNetworking-master/AFNetworking/AFURLSessionManager.h new file mode 100755 index 0000000..21d9d64 --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLSessionManager.h @@ -0,0 +1,546 @@ +// AFURLSessionManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#import "AFNetworkReachabilityManager.h" + +#ifndef NS_DESIGNATED_INITIALIZER +#if __has_attribute(objc_designated_initializer) +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +#else +#define NS_DESIGNATED_INITIALIZER +#endif +#endif + +/** + `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + + ## Subclassing Notes + + This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. + + ## NSURLSession & NSURLSessionTask Delegate Methods + + `AFURLSessionManager` implements the following delegate methods: + + ### `NSURLSessionDelegate` + + - `URLSession:didBecomeInvalidWithError:` + - `URLSession:didReceiveChallenge:completionHandler:` + - `URLSessionDidFinishEventsForBackgroundURLSession:` + + ### `NSURLSessionTaskDelegate` + + - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` + - `URLSession:task:didReceiveChallenge:completionHandler:` + - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` + - `URLSession:task:didCompleteWithError:` + + ### `NSURLSessionDataDelegate` + + - `URLSession:dataTask:didReceiveResponse:completionHandler:` + - `URLSession:dataTask:didBecomeDownloadTask:` + - `URLSession:dataTask:didReceiveData:` + - `URLSession:dataTask:willCacheResponse:completionHandler:` + + ### `NSURLSessionDownloadDelegate` + + - `URLSession:downloadTask:didFinishDownloadingToURL:` + - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` + - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSCoding Caveats + + - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. + + ## NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. + - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +@interface AFURLSessionManager : NSObject + +/** + The managed session. + */ +@property (readonly, nonatomic, strong) NSURLSession *session; + +/** + The operation queue on which delegate callbacks are run. + */ +@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) id responseSerializer; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +///-------------------------------------- +/// @name Monitoring Network Reachability +///-------------------------------------- + +/** + The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; + +///---------------------------- +/// @name Getting Session Tasks +///---------------------------- + +/** + The data, upload, and download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *tasks; + +/** + The data tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *dataTasks; + +/** + The upload tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *uploadTasks; + +/** + The download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *downloadTasks; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_queue_t completionQueue; +#else +@property (nonatomic, assign) dispatch_queue_t completionQueue; +#endif + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +#if OS_OBJECT_HAVE_OBJC_SUPPORT +@property (nonatomic, strong) dispatch_group_t completionGroup; +#else +@property (nonatomic, assign) dispatch_group_t completionGroup; +#endif + +///--------------------------------- +/// @name Working Around System Bugs +///--------------------------------- + +/** + Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. + + @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. + + @see https://github.com/AFNetworking/AFNetworking/issues/1675 + */ +@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. + + @param configuration The configuration used to create the managed session. + + @return A manager for a newly-created session. + */ +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +/** + Invalidates the managed session, optionally canceling pending tasks. + + @param cancelPendingTasks Whether or not to cancel pending tasks. + */ +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; + +///------------------------- +/// @name Running Data Tasks +///------------------------- + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +///--------------------------- +/// @name Running Upload Tasks +///--------------------------- + +/** + Creates an `NSURLSessionUploadTask` with the specified request for a local file. + + @param request The HTTP request for the request. + @param fileURL A URL to the local file to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + + @see `attemptsToRecreateUploadTasksForBackgroundSessions` + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. + + @param request The HTTP request for the request. + @param bodyData A data object containing the HTTP body to be uploaded. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified streaming request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current upload progress. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler; + +///----------------------------- +/// @name Running Download Tasks +///----------------------------- + +/** + Creates an `NSURLSessionDownloadTask` with the specified request. + + @param request The HTTP request for the request. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + + @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; + +/** + Creates an `NSURLSessionDownloadTask` with the specified resume data. + + @param resumeData The data used to resume downloading. + @param progress A progress object monitoring the current download progress. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler; + +///--------------------------------- +/// @name Getting Progress for Tasks +///--------------------------------- + +/** + Returns the upload progress of the specified task. + + @param uploadTask The session upload task. Must not be `nil`. + + @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. + */ +- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask; + +/** + Returns the download progress of the specified task. + + @param downloadTask The session download task. Must not be `nil`. + + @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. + */ +- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask; + +///----------------------------------------- +/// @name Setting Session Delegate Callbacks +///----------------------------------------- + +/** + Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. + + @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. + */ +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block; + +/** + Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block; + +///-------------------------------------- +/// @name Setting Task Delegate Callbacks +///-------------------------------------- + +/** + Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. + + @param block A block object to be executed when a task requires a new request body stream. + */ +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; + +/** + Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. + + @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. + */ +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; + +/** + Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block; + +/** + Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; + +/** + Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. + + @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. + */ +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block; + +///------------------------------------------- +/// @name Setting Data Task Delegate Callbacks +///------------------------------------------- + +/** + Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + + @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. + */ +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; + +/** + Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. + + @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. + */ +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; + +/** + Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; + +/** + Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. + + @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. + */ +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; + +/** + Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. + + @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. + */ +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block; + +///----------------------------------------------- +/// @name Setting Download Task Delegate Callbacks +///----------------------------------------------- + +/** + Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. + + @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. + */ +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; + +/** + Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; + +/** + Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + + @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. + */ +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; + +@end + +#endif + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when a task begins executing. + + @deprecated Use `AFNetworkingTaskDidResumeNotification` instead. + */ +extern NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task resumes. + */ +extern NSString * const AFNetworkingTaskDidResumeNotification; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + + @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + */ +extern NSString * const AFNetworkingTaskDidCompleteNotification; + +/** + Posted when a task suspends its execution. + */ +extern NSString * const AFNetworkingTaskDidSuspendNotification; + +/** + Posted when a session is invalidated. + */ +extern NSString * const AFURLSessionDidInvalidateNotification; + +/** + Posted when a session download task encountered an error when moving the temporary download file to a specified destination. + */ +extern NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. + */ +extern NSString * const AFNetworkingTaskDidCompleteResponseDataKey; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + + @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. + */ +extern NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + + @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. + */ +extern NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + + @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. + */ +extern NSString * const AFNetworkingTaskDidCompleteAssetPathKey; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + + @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead. + */ +extern NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. + */ +extern NSString * const AFNetworkingTaskDidCompleteErrorKey; diff --git a/AFNetworking-master/AFNetworking/AFURLSessionManager.m b/AFNetworking-master/AFNetworking/AFURLSessionManager.m new file mode 100755 index 0000000..837ea1c --- /dev/null +++ b/AFNetworking-master/AFNetworking/AFURLSessionManager.m @@ -0,0 +1,1103 @@ +// AFURLSessionManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFURLSessionManager.h" +#import + +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) + +static dispatch_queue_t url_session_manager_creation_queue() { + static dispatch_queue_t af_url_session_manager_creation_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); + }); + + return af_url_session_manager_creation_queue; +} + +static dispatch_queue_t url_session_manager_processing_queue() { + static dispatch_queue_t af_url_session_manager_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_url_session_manager_processing_queue; +} + +static dispatch_group_t url_session_manager_completion_group() { + static dispatch_group_t af_url_session_manager_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_completion_group = dispatch_group_create(); + }); + + return af_url_session_manager_completion_group; +} + +NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; +NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; +NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; +NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; + +NSString * const AFNetworkingTaskDidStartNotification = @"com.alamofire.networking.task.resume"; // Deprecated +NSString * const AFNetworkingTaskDidFinishNotification = @"com.alamofire.networking.task.complete"; // Deprecated + +NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; +NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; +NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; +NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; +NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; + +NSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; // Deprecated +NSString * const AFNetworkingTaskDidFinishResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; // Deprecated +NSString * const AFNetworkingTaskDidFinishErrorKey = @"com.alamofire.networking.task.complete.error"; // Deprecated +NSString * const AFNetworkingTaskDidFinishAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; // Deprecated + +static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; + +static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; + +static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; + +typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); + +typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); + +typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); +typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); +typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); + +typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); +typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); +typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); +typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); + +typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); +typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); +typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); + +typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); + +#pragma mark - + +@interface AFURLSessionManagerTaskDelegate : NSObject +@property (nonatomic, weak) AFURLSessionManager *manager; +@property (nonatomic, strong) NSMutableData *mutableData; +@property (nonatomic, strong) NSProgress *progress; +@property (nonatomic, copy) NSURL *downloadFileURL; +@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; +@end + +@implementation AFURLSessionManagerTaskDelegate + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.mutableData = [NSMutableData data]; + + self.progress = [NSProgress progressWithTotalUnitCount:0]; + + return self; +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + task:(__unused NSURLSessionTask *)task + didSendBodyData:(__unused int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + self.progress.totalUnitCount = totalBytesExpectedToSend; + self.progress.completedUnitCount = totalBytesSent; +} + +- (void)URLSession:(__unused NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong AFURLSessionManager *manager = self.manager; + + __block id responseObject = nil; + + __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; + + if (self.downloadFileURL) { + userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; + } else if (self.mutableData) { + userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = [NSData dataWithData:self.mutableData]; + } + + if (error) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, error); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + } else { + dispatch_async(url_session_manager_processing_queue(), ^{ + NSError *serializationError = nil; + responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:[NSData dataWithData:self.mutableData] error:&serializationError]; + + if (self.downloadFileURL) { + responseObject = self.downloadFileURL; + } + + if (responseObject) { + userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; + } + + if (serializationError) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; + } + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, serializationError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + }); + } +#pragma clang diagnostic pop +} + +#pragma mark - NSURLSessionDataTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + dataTask:(__unused NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + [self.mutableData appendData:data]; +} + +#pragma mark - NSURLSessionDownloadTaskDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + NSError *fileManagerError = nil; + self.downloadFileURL = nil; + + if (self.downloadTaskDidFinishDownloading) { + self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (self.downloadFileURL) { + [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; + + if (fileManagerError) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } + } + } +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didWriteData:(__unused int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + self.progress.totalUnitCount = totalBytesExpectedToWrite; + self.progress.completedUnitCount = totalBytesWritten; +} + +- (void)URLSession:(__unused NSURLSession *)session + downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes { + self.progress.totalUnitCount = expectedTotalBytes; + self.progress.completedUnitCount = fileOffset; +} + +@end + +#pragma mark - + +/* + A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. + + See https://github.com/AFNetworking/AFNetworking/issues/1477 + */ + +static inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) { + class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); + } else { + method_exchangeImplementations(originalMethod, swizzledMethod); + } +} + +static inline void af_addMethod(Class class, SEL selector, Method method) { + class_addMethod(class, selector, method_getImplementation(method), method_getTypeEncoding(method)); +} + +static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; +static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; + +@interface NSURLSessionTask (_AFStateObserving) +@end + +@implementation NSURLSessionTask (_AFStateObserving) + ++ (void)initialize { + if ([NSURLSessionTask class]) { + NSURLSessionDataTask *dataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil]; + Class taskClass = [dataTask superclass]; + + af_addMethod(taskClass, @selector(af_resume), class_getInstanceMethod(self, @selector(af_resume))); + af_addMethod(taskClass, @selector(af_suspend), class_getInstanceMethod(self, @selector(af_suspend))); + af_swizzleSelector(taskClass, @selector(resume), @selector(af_resume)); + af_swizzleSelector(taskClass, @selector(suspend), @selector(af_suspend)); + + [dataTask cancel]; + } +} + +#pragma mark - + +- (void)af_resume { + NSURLSessionTaskState state = self.state; + [self af_resume]; + + if (state != NSURLSessionTaskStateRunning) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; + } +} + +- (void)af_suspend { + NSURLSessionTaskState state = self.state; + [self af_suspend]; + + if (state != NSURLSessionTaskStateSuspended) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; + } +} + +@end + +#pragma mark - + +@interface AFURLSessionManager () +@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; +@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; +@property (readwrite, nonatomic, strong) NSURLSession *session; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; +@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; +@property (readwrite, nonatomic, strong) NSLock *lock; +@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; +@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; +@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; +@end + +@implementation AFURLSessionManager + +- (instancetype)init { + return [self initWithSessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + self = [super init]; + if (!self) { + return nil; + } + + if (!configuration) { + configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + } + + self.sessionConfiguration = configuration; + + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + + self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; + + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; + + self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; + + self.lock = [[NSLock alloc] init]; + self.lock.name = AFURLSessionManagerLockName; + + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + for (NSURLSessionDataTask *task in dataTasks) { + [self addDelegateForDataTask:task completionHandler:nil]; + } + + for (NSURLSessionUploadTask *uploadTask in uploadTasks) { + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + } + + for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + } + }]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:nil]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - + +- (NSString *)taskDescriptionForSessionTasks { + return [NSString stringWithFormat:@"%p", self]; +} + +- (void)taskDidResume:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; + }); + } + } +} + +- (void)taskDidSuspend:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; + }); + } + } +} + +#pragma mark - + +- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = nil; + [self.lock lock]; + delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; + [self.lock unlock]; + + return delegate; +} + +- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate + forTask:(NSURLSessionTask *)task +{ + NSParameterAssert(task); + NSParameterAssert(delegate); + + [self.lock lock]; + self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; + [self.lock unlock]; +} + +- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + dataTask.taskDescription = self.taskDescriptionForSessionTasks; + [self setDelegate:delegate forTask:dataTask]; +} + +- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t)[contentLength longLongValue]; + } + } + + if (delegate.progress) { + delegate.progress.totalUnitCount = totalUnitCount; + } else { + delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount]; + } + + delegate.progress.pausingHandler = ^{ + [uploadTask suspend]; + }; + delegate.progress.cancellationHandler = ^{ + [uploadTask cancel]; + }; + + if (progress) { + *progress = delegate.progress; + } + + uploadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:uploadTask]; +} + +- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + if (destination) { + delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { + return destination(location, task.response); + }; + } + + if (progress) { + *progress = delegate.progress; + } + + downloadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:downloadTask]; +} + +- (void)removeDelegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; + [self.lock unlock]; +} + +- (void)removeAllDelegates { + [self.lock lock]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects]; + [self.lock unlock]; +} + +#pragma mark - + +- (NSArray *)tasksForKeyPath:(NSString *)keyPath { + __block NSArray *tasks = nil; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { + tasks = dataTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { + tasks = uploadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { + tasks = downloadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { + tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; + } + + dispatch_semaphore_signal(semaphore); + }]; + + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + + return tasks; +} + +- (NSArray *)tasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)dataTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)uploadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)downloadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +#pragma mark - + +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { + dispatch_async(dispatch_get_main_queue(), ^{ + if (cancelPendingTasks) { + [self.session invalidateAndCancel]; + } else { + [self.session finishTasksAndInvalidate]; + } + }); +} + +#pragma mark - + +- (void)setResponseSerializer:(id )responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionDataTask *dataTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + dataTask = [self.session dataTaskWithRequest:request]; + }); + + [self addDelegateForDataTask:dataTask completionHandler:completionHandler]; + + return dataTask; +} + +#pragma mark - + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + }); + + if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { + for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + } + } + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + uploadTask = [self.session uploadTaskWithStreamedRequest:request]; + }); + + [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; + + return uploadTask; +} + +#pragma mark - + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithRequest:request]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(NSProgress * __autoreleasing *)progress + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + dispatch_sync(url_session_manager_creation_queue(), ^{ + downloadTask = [self.session downloadTaskWithResumeData:resumeData]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +#pragma mark - + +- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask { + return [[self delegateForTask:uploadTask] progress]; +} + +- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask { + return [[self delegateForTask:downloadTask] progress]; +} + +#pragma mark - + +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { + self.sessionDidBecomeInvalid = block; +} + +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.sessionDidReceiveAuthenticationChallenge = block; +} + +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { + self.didFinishEventsForBackgroundURLSession = block; +} + +#pragma mark - + +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { + self.taskNeedNewBodyStream = block; +} + +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { + self.taskWillPerformHTTPRedirection = block; +} + +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.taskDidReceiveAuthenticationChallenge = block; +} + +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { + self.taskDidSendBodyData = block; +} + +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { + self.taskDidComplete = block; +} + +#pragma mark - + +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { + self.dataTaskDidReceiveResponse = block; +} + +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { + self.dataTaskDidBecomeDownloadTask = block; +} + +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { + self.dataTaskDidReceiveData = block; +} + +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { + self.dataTaskWillCacheResponse = block; +} + +#pragma mark - + +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { + self.downloadTaskDidFinishDownloading = block; +} + +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { + self.downloadTaskDidWriteData = block; +} + +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { + self.downloadTaskDidResume = block; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + return self.taskWillPerformHTTPRedirection != nil; + } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { + return self.dataTaskDidReceiveResponse != nil; + } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { + return self.dataTaskWillCacheResponse != nil; + } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { + return self.didFinishEventsForBackgroundURLSession != nil; + } + + return [[self class] instancesRespondToSelector:selector]; +} + +#pragma mark - NSURLSessionDelegate + +- (void)URLSession:(NSURLSession *)session +didBecomeInvalidWithError:(NSError *)error +{ + if (self.sessionDidBecomeInvalid) { + self.sessionDidBecomeInvalid(session, error); + } + + [self removeAllDelegates]; + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; +} + +- (void)URLSession:(NSURLSession *)session +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.sessionDidReceiveAuthenticationChallenge) { + disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + if (credential) { + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler +{ + NSURLRequest *redirectRequest = request; + + if (self.taskWillPerformHTTPRedirection) { + redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); + } + + if (completionHandler) { + completionHandler(redirectRequest); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.taskDidReceiveAuthenticationChallenge) { + disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler +{ + NSInputStream *inputStream = nil; + + if (self.taskNeedNewBodyStream) { + inputStream = self.taskNeedNewBodyStream(session, task); + } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { + inputStream = [task.originalRequest.HTTPBodyStream copy]; + } + + if (completionHandler) { + completionHandler(inputStream); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + + int64_t totalUnitCount = totalBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t) [contentLength longLongValue]; + } + } + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount]; + + if (self.taskDidSendBodyData) { + self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + + // delegate may be nil when completing a task in the background + if (delegate) { + [delegate URLSession:session task:task didCompleteWithError:error]; + + [self removeDelegateForTask:task]; + } + + if (self.taskDidComplete) { + self.taskDidComplete(session, task, error); + } + +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler +{ + NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; + + if (self.dataTaskDidReceiveResponse) { + disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); + } + + if (completionHandler) { + completionHandler(disposition); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + if (delegate) { + [self removeDelegateForTask:dataTask]; + [self setDelegate:delegate forTask:downloadTask]; + } + + if (self.dataTaskDidBecomeDownloadTask) { + self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; + + if (self.dataTaskDidReceiveData) { + self.dataTaskDidReceiveData(session, dataTask, data); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler +{ + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.dataTaskWillCacheResponse) { + cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); + } + + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + if (self.didFinishEventsForBackgroundURLSession) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.didFinishEventsForBackgroundURLSession(session); + }); + } +} + +#pragma mark - NSURLSessionDownloadDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + if (self.downloadTaskDidFinishDownloading) { + NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (fileURL) { + delegate.downloadFileURL = fileURL; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; + if (error) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } + + return; + } + } + + if (delegate) { + [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; + + if (self.downloadTaskDidWriteData) { + self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes]; + + if (self.downloadTaskDidResume) { + self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (id)initWithCoder:(NSCoder *)decoder { + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + + self = [self initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; +} + +#pragma mark - NSCopying + +- (id)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; +} + +@end + +#endif diff --git a/AFNetworking-master/CHANGES b/AFNetworking-master/CHANGES new file mode 100755 index 0000000..571b83f --- /dev/null +++ b/AFNetworking-master/CHANGES @@ -0,0 +1,1673 @@ += 2.5.3 (2015-04-20) + +(See https://github.com/AFNetworking/AFNetworking/releases/tag/2.5.3) + += 2.5.2 (2015-03-26) + +(See https://github.com/AFNetworking/AFNetworking/releases/tag/2.5.2) + += 2.5.1 (2015-02-09) + + * Add `NS_DESIGNATED_INITIALIZER` macros. (Samir Guerdah) + + * Fix and clarify documentation for `stringEncoding` property. (Mattt +Thompson) + + * Fix for NSProgress bug where two child NSProgress instances are added to a +parent NSProgress. (Edward Povazan) + + * Fix incorrect file names in headers. (Steven Fisher) + + * Fix KVO issue when running testing target caused by lack of +`automaticallyNotifiesObserversForKey:` implementation. (Mattt Thompson) + + * Fix use of variable arguments for UIAlertView category. (Kenta Tokumoto) + + * Fix `genstrings` warning for `NSLocalizedString` usage in +`UIAlertView+AFNetworking`. (Adar Porat) + + * Fix `NSURLSessionManager` task observation for network activity indicator +manager. (Phil Tang) + + * Fix `UIButton` category method caching of background image (Fernanda G. +Geraissate) + + * Fix `UIButton` category method failure handling. (Maxim Zabelin) + + * Update multipart upload method requirements to ensure `request.HTTPBody` +is non-nil. (Mattt Thompson) + + * Update to use builtin `__Require` macros from AssertMacros.h. (Cédric +Luthi) + + * Update `parameters` parameter to accept `id` for custom serialization +block. (@mooosu) + += 2.5.0 (2014-11-17) + + * Add documentation for expected background session manager usage (Aaron +Brager) + + * Add missing documentation for `AFJSONRequestSerializer` and +`AFPropertyListSerializer` (Mattt Thompson) + + * Add tests for requesting HTTPS endpoints (Mattt Thompson) + + * Add `init` method declarations of `AFURLResponseSerialization` classes for +Swift compatibility (Allen Rohner) + + * Change default User-Agent to use the version number instead of the build +number (Tim Watson) + + * Change `validatesDomainName` to readonly property (Mattt Thompson, Brian +King) + + * Fix checks when observing `AFHTTPRequestSerializerObservedKeyPaths` (Jacek +Suliga) + + * Fix crash caused by attempting to set nil `NSURLResponse -URL` as key for +`userInfo` dictionary (Elvis Nuñez) + + * Fix crash for multipart streaming requests in XPC services (Mattt Thompson) + + * Fix minor aspects of response serializer documentation (Mattt Thompson) + + * Fix potential race condition for `AFURLConnectionOperation -description` + + * Fix widespread crash related to key-value observing of `NSURLSessionTask +-state` (Phil Tang) + + * Fix `UIButton` category associated object keys (Kristian Bauer, Mattt +Thompson) + + * Remove `charset` parameter from Content-Type HTTP header field values for +`AFJSONRequestSerializer` and `AFPropertyListSerializer` (Mattt Thompson) + + * Update CocoaDocs color scheme (@Orta) + + * Update Podfile to explicitly define sources (Kyle Fuller) + + * Update to relay `downloadFileURL` to the delegate if the manager picks a +`fileURL` (Brian King) + + * Update `AFSSLPinningModeNone` to not validate domain name (Brian King) + + * Update `UIButton` category to cache images in `sharedImageCache` (John +Bushnell) + + * Update `UIRefreshControl` category to set control state to current state +of request (Elvis Nuñez) + += 2.4.1 (2014-09-04) + + * Fix compiler warning generated on 32-bit architectures (John C. Daub) + + * Fix potential crash caused by failed validation with nil responseData + (Mattt Thompson) + + * Fix to suppress compiler warnings for out-of-range enumerated type + value assignment (Mattt Thompson) + += 2.4.0 (2014-09-03) + + * Add CocoaDocs color scheme (Orta) + + * Add image cache to `UIButton` category (Kristian Bauer, Mattt Thompson) + + * Add test for success block on 204 response (Mattt Thompson) + + * Add tests for encodable and re-encodable query string parameters (Mattt +Thompson) + + * Add `AFHTTPRequestSerializer -valueForHTTPHeaderField:` (Kyle Fuller) + + * Add `AFNetworkingOperationFailingURLResponseDataErrorKey` key to user info +of serialization error (Yannick Heinrich) + + * Add `imageResponseSerializer` property to `UIButton` category (Kristian +Bauer, Mattt Thompson) + + * Add `removesKeysWithNullValues` setting to serialization and copying (Jon +Shier) + + * Change request and response serialization tests to be factored out into +separate files (Mattt Thompson) + + * Change signature of success parameters in `UIButton` category methods to +match those in `UIImageView` (Mattt Thompson) + + * Change to remove charset parameter from +`application/x-www-form-urlencoded` content type (Mattt Thompson) + + * Change `AFImageCache` to conform to `NSObject` protocol ( Marcelo Fabri) + + * Change `AFMaximumNumberOfToRecreateBackgroundSessionUploadTask` to +`AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask` (Mattt +Thompson) + + * Fix documentation error for NSSecureCoding (Robert Ryan) + + * Fix documentation for `URLSessionDidFinishEventsForBackgroundURLSession` +delegate method (Mattt Thompson) + + * Fix expired ADN certificate in example project (Carson McDonald) + + * Fix for interoperability within Swift project (Stephan Krusche) + + * Fix for potential deadlock due to KVO subscriptions within a lock +(Alexander Skvortsov) + + * Fix iOS 7 bug where session tasks can have duplicate identifiers if +created from different threads (Mattt Thompson) + + * Fix iOS 8 bug by adding explicit synthesis for `delegate` of +`AFMultipartBodyStream` (Mattt Thompson) + + * Fix issue caused by passing `nil` as body of multipart form part (Mattt +Thompson) + + * Fix issue caused by passing `nil` as destination in download task method +(Mattt Thompson) + + * Fix issue with `AFHTTPRequestSerializer` returning a request and silently +handling an error from a `queryStringSerialization` block (Kyle Fuller, Mattt +Thompson) + + * Fix potential issues by ensuring `invalidateSessionCancelingTasks` only +executes on main thread (Mattt Thompson) + + * Fix potential memory leak caused by deferred opening of output stream +(James Tomson) + + * Fix properties on session managers such that default values will not trump +values set in the session configuration (Mattt Thompson) + + * Fix README to include explicit call to start reachability manager (Mattt +Thompson) + + * Fix request serialization error handling in `AFHTTPSessionManager` +convenience methods (Kyle Fuller, Lars Anderson, Mattt Thompson) + + * Fix stray localization macro (Devin McKaskle) + + * Fix to ensure connection operation `-copyWithZone:` calls super +implementation (Chris Streeter) + + * Fix `UIButton` category to only cancel request for specified state +(@xuzhe, Mattt Thompson) + += 2.3.1 (2014-06-13) + + * Fix issue with unsynthesized `streamStatus` & `streamError` properties +on `AFMultipartBodyStream` (Mattt Thompson) + += 2.3.0 (2014-06-11) + + * Add check for `AF_APP_EXTENSIONS` macro to conditionally compile +background method that makes API call unavailable to App Extensions in iOS 8 +/ OS X 10.10 + + * Add further explanation for network reachability in documentation (Steven +Fisher) + + * Add notification for initial change from +`AFNetworkReachabilityStatusUnknown` to any other state (Jason Pepas, +Sebastian S.A., Mattt Thompson) + + * Add tests for AFNetworkActivityIndicatorManager (Dave Weston, Mattt +Thompson) + + * Add tests for AFURLSessionManager task progress (Ullrich Schäfer) + + * Add `attemptsToRecreateUploadTasksForBackgroundSessions` property, which +attempts Apple's recommendation of retrying a failed upload task if initial +creation did not succeed (Mattt Thompson) + + * Add `completionQueue` and `completionGroup` properties to +`AFHTTPRequestOperationManager` (Robert Ryan) + + * Change deprecating `AFErrorDomain` in favor of +`AFRequestSerializerErrorDomain` & `AFResponseSerializerErrorDomain` (Mattt +Thompson) + + * Change serialization tests to be split over two different files (Mattt +Thompson) + + * Change to make NSURLSession subspec not depend on NSURLConnection subspec +(Mattt Thompson) + + * Change to make Serialization subspec not depend on NSURLConnection subspec +(Nolan Waite, Mattt Thompson) + + * Change `completionHandler` of +`application:handleEventsForBackgroundURLSession:completion:` to be run on +main thread (Padraig Kennedy) + + * Change `UIImageView` category to accept any object conforming to +`AFURLResponseSerialization`, rather than just `AFImageResponseSerializer` +(Romans Karpelcevs) + + * Fix calculation and behavior of `NSProgress` (Padraig Kennedy, Ullrich +Schäfer) + + * Fix deprecation warning for `backgroundSessionConfiguration:` in iOS 8 / +OS X 10.10 (Mattt Thompson) + + * Fix implementation of `copyWithZone:` in serializer subclasses (Chris +Streeter) + + * Fix issue in Xcode 6 caused by implicit synthesis of overridden `NSStream` +properties (Clay Bridges, Johan Attali) + + * Fix KVO handling for `NSURLSessionTask` on iOS 8 / OS X 10.10 (Mattt +Thompson) + + * Fix KVO leak for `NSURLSessionTask` (@Zyphrax) + + * Fix potential crash caused by attempting to use non-existent error of +failing requests due to URLs exceeding a certain length (Boris Bügling) + + * Fix to check existence of `uploadProgress` block inside a referencing +`dispatch_async` to avoid potential race condition (Kyungkoo Kang) + + * Fix `UIImageView` category race conditions (Sunny) + + * Remove unnecessary default operation response serializer setters (Mattt +Thompson) + += 2.2.4 (2014-05-13) + + * Add NSSecureCoding support to all AFNetworking classes (Kyle Fuller, Mattt +Thompson) + + * Change behavior of request operation `NSOutputStream` property to only nil +out if `responseData` is non-nil, meaning that no custom object was set +(Mattt Thompson) + + * Fix data tasks to not attempt to track progress, and rare related crash +(Padraig Kennedy) + + * Fix issue with `-downloadTaskDidFinishDownloading:` not being called +(Andrej Mihajlov) + + * Fix KVO leak on invalidated session tasks (Mattt Thompson) + + * Fix missing import of `UIRefreshControl+AFNetworking" (@BB9z) + + * Fix potential compilation errors on Mac OS X, caused by import order of +``, which signaled an incorrect deprecation warning (Mattt +Thompson) + + * Fix race condition in UIImageView+AFNetworking when making several image +requests in quick succession (Alexander Crettenand) + + * Update documentation for `-downloadTaskWithRequest:` to warn about blocks +being disassociated on app termination and backgrounding (Robert Ryan) + += 2.2.3 (2014-04-18) + + * Fix `AFErrorOrUnderlyingErrorHasCodeInDomain` function declaration for +AFXMLDocumentResponseSerializer (Mattt Thompson) + + * Fix error domain check in `AFErrorOrUnderlyingErrorHasCodeInDomain` +(Mattt Thompson) + + * Fix `UIImageView` category to only `nil` out request operation properties +belonging to completed request (Mattt Thompson) + + * Fix `removesKeysWithNullValues` to respect +`NSJSONReadingMutableContainers` option (Mattt Thompson) + + * Change `removesKeysWithNullValues` property to recursively remove null +values from dictionaries nested in arrays (@jldagon) + + * Change to not override `Content-Type` header field values set by +`HTTPRequestHeaders` property (Aaron Brager, Mattt Thompson) + += 2.2.2 (2014-04-15) + + * Add `removesKeysWithNullValues` property to `AFJSONResponsSerializer` to +automatically remove `NSNull` values in dictionaries serialized from JSON +(Mattt Thompson) + + * Add unit test for checking content type (Diego Torres) + + * Add `boundary` property to `AFHTTPBodyPart -copyWithZone:` + + * Change to accept `id` parameter type in HTTP manager convenience methods +(Mattt Thompson) + + * Change to deprecate `setAuthorizationHeaderFieldWithToken:`, in favor of +users specifying an `Authorization` header field value themselves (Mattt +Thompson) + + * Change to use `long long` type to prevent a difference in stream size +caps on 32-bit and 64-bit architectures (Yung-Luen Lan, Cédric Luthi) + + * Fix calculation of Content-Length in `taskDidSendBodyData` (Christos +Vasilakis) + + * Fix for comparison of image view request operations (Mattt Thompson) + + * Fix for SSL certificate validation to check status codes at runtime (Dave +Anderson) + + * Fix to add missing call to delegate in +`URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + * Fix to call `taskDidComplete` if delegate is missing (Jeff Ward) + + * Fix to implement `respondsToSelector:` for `NSURLSession` delegate +methods to conditionally respond to conditionally respond to optional +selectors if and only if a custom block has been set (Mattt Thompson) + + * Fix to prevent illegal state values from being assigned for +`AFURLConnectionOperation` (Kyle Fuller) + + * Fix to re-establish `AFNetworkingURLSessionTaskDelegate` objects after +restoring from a background configuration (Jeff Ward) + + * Fix to reduce memory footprint by `nil`-ing out request operation +`outputStream` after closing, as well as image view request operation after +setting image (Teun van Run, Mattt Thompson) + + * Remove unnecessary call in class constructor (Bernhard Loibl) + + * Remove unnecessary check for `respondsToSelector:` for `UIScreen scale` +in User-Agent string (Samuel Goodwin) + + * Update App.net certificate and API base URL (Cédric Luthi) + + * Update examples in README (@petard, @orta, Mattt Thompson) + + * Update Travis CI icon to use SVG format (Maximilian Tagher) + += 2.2.1 (2014-03-14) + + * Fix `-Wsign-conversion` warning in AFURLConnectionOperation (Jesse Collis) + + * Fix `-Wshorten-64-to-32` warning (Jesse Collis) + + * Remove unnecessary #imports in `UIImageView` & `UIWebView` categories +(Jesse Collis) + + * Fix call to `CFStringTransform()` by checking return value before setting +as `User-Agent` (Kevin Cassidy Jr) + + * Update `AFJSONResponseSerializer` adding `@autorelease` to relieve memory +pressure (Mattt Thompson, Michal Pietras) + + * Update `AFJSONRequestSerializer` to accept `id` (Daren Desjardins) + + * Fix small documentation bug (@jkoepcke) + + * Fix behavior of SSL pinning. In case of `validatesDomainName == YES`, it +now explicitly uses `SecPolicyCreateSSL`, which also validates the domain +name. Otherwise, `SecPolicyCreateBasicX509` is used. +`AFSSLPinningModeCertificate` now uses `SecTrustSetAnchorCertificates`, which +allows explicit specification of all trusted certificates. For +`AFSSLPinningModePublicKey`, the number of trusted public keys determines if +the server should be trusted. (Oliver Letterer, Eric Allam) + += 2.2.0 (2014-02-25) + + * Add default initializer to make `AFHTTPRequestOperationManager` +consistent with `AFHTTPSessionManager` (Marcelo Fabri) + + * Add documentation about `UIWebView` category and implementing +`UIWebViewDelegate` (Mattt Thompson) + + * Add missing `NSCoding` and `NSCopying` implementations for +`AFJSONRequestSerializer` (Mattt Thompson) + + * Add note about use of `-startMonitoring` in +`AFNetworkReachabilityManager` (Mattt Thompson) + + * Add setter for needsNewBodyStream block (Carmen Cerino) + + * Add support for specifying a response serializer on a per-instance of +`AFURLSessionManagerTaskDelegate` (Blake Watters) + + * Add `AFHTTPRequestSerializer +-requestWithMultipartFormRequest:writingStreamContentsToFile:completionHandler +:` as a workaround for a bug in NSURLSession that removes the Content-Length +header from streamed requests (Mattt Thompson) + + * Add `NSURLRequest` factory properties on `AFHTTPRequestSerializer` (Mattt +Thompson) + + * Add `UIRefreshControl+AFNetworking` (Mattt Thompson) + + * Change example project to enable certificate pinning (JP Simard) + + * Change to allow self-signed certificates (Frederic Jacobs) + + * Change to make `reachabilityManager` property readwrite (Mattt Thompson) + + * Change to sort `NSSet` members during query string parameter +serialization (Mattt Thompson) + + * Change to use case sensitive compare when sorting keys in query string +serialization (Mattt Thompson) + + * Change to use xcpretty instead of xctool for automated testing (Kyle +Fuller, Marin Usalj, Carson McDonald) + + * Change to use `@selector` values as keys for associated objects (Mattt +Thompson) + + * Change `setImageWithURL:placeholder:`, et al. to only set placeholder +image if not `nil` (Alejandro Martinez) + + * Fix auto property synthesis warnings (Oliver Letterer) + + * Fix domain name validation for SSL certificates (Oliver Letterer) + + * Fix issue with session task delegate KVO observation (Kyle Fuller) + + * Fix placement of `baseURL` method declaration (Oliver Letterer) + + * Fix podspec linting error (Ari Braginsky) + + * Fix potential concurrency issues by adding lock around setting +`isFinished` state in `AFURLConnectionOperation` (Mattt Thompson) + + * Fix potential vulnerability caused by hard-coded multipart form data +boundary (Mathias Bynens, Tom Van Goethem, Mattt Thompson) + + * Fix protocol name in #pragma mark declaration (@sevntine) + + * Fix regression causing inflated images to have incorrect orientation +(Mattt Thompson) + + * Fix to `AFURLSessionManager` `NSCoding` implementation, to accommodate +`NSURLSessionConfiguration` no longer conforming to `NSCoding`. + + * Fix Travis CI integration (Kyle Fuller, Marin Usalj, Carson McDonald) + + * Fix various static analyzer warnings (Philippe Casgrain, Jim Young, +Steven Fisher, Mattt Thompson) + + * Fix with download progress calculation of completion units (Kyle Fuller) + + * Fix Xcode 5.1 compiler warnings (Nick Banks) + + * Fix `AFHTTPRequestOperationManager` to default +`shouldUseCredentialStorage` to `YES`, as documented (Mattt Thompson) + + * Remove Unused format property in `AFJSONRequestSerializer` (Mattt +Thompson) + + * Remove unused `acceptablePathExtensions` class method in +`AFJSONRequestSerializer` (Mattt Thompson) + + * Update #ifdef declarations in UIKit categories to be simpler (Mattt +Thompson) + + * Update podspec to includ social_media_url (Kyle Fuller) + + * Update types for 64 bit architecture (Bruno Tortato Furtado, Mattt +Thompson) + += 2.1.0 (2014-01-16) + + * Add CONTRIBUTING (Kyle Fuller) + + * Add domain name verification for SSL certificates (Oliver Letterer) + + * Add leaf certificate checking (Alex Leverington, Carson McDonald, Mattt +Thompson) + + * Add test case for stream failure handling (Kyle Fuller) + + * Add underlying error properties to response serializers to forward errors +to subsequent validation steps (Mattt Thompson) + + * Add `AFImageCache` protocol, to allow for custom image caches to be +specified for `UIImageView` (Mattt Thompson) + + * Add `error` out parameter for request serializer, deprecating existing +request constructor methods (Adam Becevello) + + * Change request serializer protocol to take id type for parameters (Mattt +Thompson) + + * Change to add validation of download task responses (Mattt Thompson) + + * Change to force upload progress, by using original request Content-Length +(Mateusz Malczak) + + * Change to use `NSDictionary` object literals for `NSError` `userInfo` +construction (Mattt Thompson) + + * Fix #pragma declaration to be NSURLConnectionDataDelegate, rather than +NSURLConnectionDelegate (David Paschich) + + * Fix a bug when appending a file part to multipart request from a URL +(Kyle Fuller) + + * Fix analyzer warning about weak receiver being set to nil, capture strong +reference (Stewart Gleadow) + + * Fix appending file part to multipart request to use suggested file name, +rather than temporary one (Kyle Fuller) + + * Fix availability macros for network activity indicator (Mattt Thompson) + + * Fix crash in iOS 6.1 caused by KVO on `isCancelled` property of +`AFURLConnectionOperation` (Sam Page) + + * Fix dead store issues in `AFSecurityPolicy` (Andrew Hershberger) + + * Fix incorrect documentation for `-HTTPRequestOperationWithRequest:...` +(Kyle Fuller) + + * Fix issue in reachability callbacks, where reachability managers created +for a particular domain would initially report no reachability (Mattt +Thompson) + + * Fix logic for handling data task turning into download task (Kyle Fuller) + + * Fix property list response serializer to handle 204 response (Kyle Fuller) + + * Fix README multipart example (Johan Forssell) + + * Fix to add check for non-nil delegate in +`URLSession:didCompleteWithError:` (Kaom Te) + + * Fix to dramatically improve creation of images in +`AFInflatedImageFromResponseWithDataAtScale`, including handling of CMYK, 16 +/ 32 bpc images, and colorspace alpha settings (Robert Ryan) + + * Fix Travis CI integration and unit testing (Kyle Fuller, Carson McDonald) + + * Fix typo in comments (@palringo) + + * Fix UIWebView category to use supplied success callback (Mattt Thompson) + + * Fix various static analyzer warnings (Kyle Fuller, Jesse Collis, Mattt +Thompson) + + * Fix `+batchOfRequestOperations:...` completion block to execute in +`dispatch_async` (Mattt Thompson) + + * Remove synchronous `SCNetworkReachabilityGetFlags` call when initializing +managers, which had the potential to block in certain network conditions +(Yury Korolev, Mattt Thompson) + + * Remove unnecessary check for completionHandler in HTTP manager (Mattt +Thompson) + + * Remove unused conditional clauses (Luka Bratos) + + * Update documentation for `AFCompoundResponseSerializer` (Mattt Thompson) + + * Update httpbin certificates (Carson McDonald) + + * Update notification constant names to be consistent with `NSURLSession` +terminology (Mattt Thompson) + += 2.0.3 (2013-11-18) + + * Fix a bug where `AFURLConnectionOperation -pause` did not correctly reset +the state of `AFURLConnectionOperation`, causing the Network Thread to enter +an infinite loop (Erik Chen) + + * Fix a bug where `AFURLConnectionOperation -cancel` does not set the +appropriate error on the `NSOperation` (Erik Chen) + + * Fix to post `AFNetworkingTaskDidFinishNotification` only on main queue +(Jakub Hladik) + + * Fix issue where the query string serialization block was not used (Kevin +Harwood) + + * Fix project file and repository directory items (Andrew Newdigate) + + * Fix `NSURLSession` subspec (Mattt Thompson) + + * Fix to session task delegate KVO by moving observer removal to +`-didCompleteWithError:` (Mattt Thompson) + + * Add AFNetworking 1.x behavior for image construction in inflation to +ensure correct orientation (Mattt Thompson) + + * Add `NSParameterAssert` for internal task constructors in order to catch +invalid constructions early (Mattt Thompson) + + * Update replacing `NSParameterAssert` with early `nil` return if session +was unable to create a task (Mattt Thompson) + + * Update `AFHTTPRequestOperationManager` and `AFHTTPSessionManager` to use +relative `self class` to create class constructor instances (Bogdan +Poplauschi) + + * Update to break out of loop if output stream does not have space to write +bytes (Mattt Thompson) + + * Update documentation and README with various fixes (Max Goedjen, Mattt +Thompson) + + * Remove unnecessary willChangeValueForKey and didChangeValueForKey method +calls (Mindaugas Vaičiūnas) + + * Remove deletion of all task delegates in +`URLSessionDidFinishEventsForBackgroundURLSession:` (Jeremy Mailen) + + * Remove empty, unused `else` branch (Luka Bratos) + += 2.0.2 (2013-10-29) + + * Add `UIWebView + -loadRequest:MIMEType:textEncodingName:progress:success:failure:` (Mattt + Thompson) + + * Fix iOS 6 compatibility in `AFHTTPSessionManager` & + `UIProgressView+AFNetworking` (Olivier Halligon, Mattt Thompson) + + * Fix issue writing partial data to output stream (Kyle Fuller) + + * Fix behavior for `nil` response in request operations (Marcelo Fabri) + + * Fix implementation of + batchOfRequestOperations:progressBlock:completionBlock: for nil when passed + empty operations parameter (Mattt Thompson) + + * Update `AFHTTPSessionManager` to allow `-init` and `initWithConfig:` to + work (Ben Scheirman) + + * Update `AFRequestOperation` to default to `AFHTTPResponseSerializer` (Jiri + Techet) + + * Update `AFHTTPResponseSerializer` to remove check for nonzero responseData + length (Mattt Thompson) + + * Update `NSCoding` methods to use NSStringFromSelector(@selector()) pattern + instead of `NSString` literals (Mattt Thompson) + + * Update multipart form stream to set Content-Length after setting request + stream (Mattt Thompson) + + * Update documentation with outdated references to `AFHTTPSerializer` (Bruno + Koga) + + * Update documentation and README with various fixes (Jon Chambers, Mattt + Thompson) + + * Update files to remove executable privilege (Kyle Fuller) + += 2.0.1 (2013-10-10) + + * Fix iOS 6 compatibility (Matt Baker, Mattt Thompson) + + * Fix example applications (Sam Soffes, Kyle Fuller) + + * Fix usage of `NSSearchPathForDirectoriesInDomains` in README (Leo Lou) + + * Fix names of exposed private methods `downloadProgress` and +`uploadProgress` (Hermes Pique) + + * Fix initial upload/download task progress updates (Vlas Voloshin) + + * Fix podspec to include `AFNetworking.h` `#import` (@haikusw) + + * Fix request serializers to not override existing header field values with +defaults (Mattt Thompson) + + * Fix unused format string placeholder (Thorsten Lockert) + + * Fix `AFHTTPRequestOperation -initWithCoder:` to call `super` (Josh Avant) + + * Fix `UIProgressView` selector name (Allen Tu) + + * Fix `UIButton` response serializer (Sam Grossberg) + + * Fix `setPinnedCertificates:` and pinned public keys (Kyle Fuller) + + * Fix timing of batched operation completion block (Denys Telezhkin) + + * Fix `GCC_WARN_ABOUT_MISSING_NEWLINE` compiler warning (Chuck Shnider) + + * Fix a format string missing argument issue in tests (Kyle Fuller) + + * Fix location of certificate chain bundle location (Kyle Fuller) + + * Fix memory leaks in AFSecurityPolicyTests (Kyle Fuller) + + * Fix potential concurrency issues in `AFURLSessionManager` by adding locks +around access to mutiple delegates dictionary (Mattt Thompson) + + * Fix unused variable compiler warnings by wrapping `OSStatus` and +`NSCAssert` with NS_BLOCK_ASSERTIONS macro (Mattt Thompson) + + * Fix compound serializer error handling (Mattt Thompson) + + * Fix string encoding for responseString (Juan Enrique) + + * Fix `UIImageView -setBackgroundImageWithRequest:` (Taichiro Yoshida) + + * Fix regressions nested multipart parameters (Mattt Thompson) + + * Add `responseObject` property to `AFHTTPRequestOperation` (Mattt Thompson) + + * Add support for automatic network reachability monitoring for request +operation and session managers (Mattt Thompson) + + * Update documentation and README with various corrections and fixes +(@haikusw, Chris Hellmuth, Dave Caunt, Mattt Thompson) + + * Update default User-Agent such that only ASCII character set is used +(Maximillian Dornseif) + + * Update SSL pinning mode to have default pinned certificates by default +(Kevin Harwood) + + * Update `AFSecurityPolicy` to use default authentication handling unless a +credential exists for the server trust (Mattt Thompson) + + * Update Prefix.pch (Steven Fisher) + + * Update minimum iOS test target to iOS 6 + + * Remove unused protection space block type (Kyle Fuller) + + * Remove unnecessary Podfile.lock (Kyle Fuller) + += 2.0.0 (2013-09-27) + +==================== + += 1.3.4 (2014-04-15) + + * Fix `AFHTTPMultipartBodyStream` to randomly generate form boundary, to +prevent attack based on a known value (Mathias Bynens, Tom Van Goethem, Mattt +Thompson) + + * Fix potential non-terminating loop in `connection:didReceiveData:` (Mattt +Thompson) + + * Fix SSL certificate validation to provide a human readable Warning when +SSL Pinning fails (Maximillian Dornseif) + + * Fix SSL certificate validation to assert that no impossible pinning +configuration exists (Maximillian Dornseif) + + * Fix to check `CFStringTransform()` call for success before using result +(Kevin Cassidy Jr) + + * Fix to prevent unused assertion results with macros (Indragie Karunaratne) + + * Fix to call call `SecTrustEvaluate` before calling +`SecTrustGetCertificateCount` in SSL certificate validation (Josh Chung) + + * Fix to add explicit cast to `NSUInteger` in format string (Alexander +Kempgen) + + * Remove unused variable `kAFStreamToStreamBufferSize` (Alexander Kempgen) + += 1.3.3 (2013-09-25) + + * Add stream error handling to `AFMultipartBodyStream` (Nicolas Bachschmidt, +Mattt Thompson) + + * Add stream error handling to `AFURLConnectionOperation +-connection:didReceiveData:` (Ian Duggan, Mattt Thompson) + + * Fix parameter query string encoding of square brackets according to RFC +3986 (Kra Larivain) + + * Fix AFHTTPBodyPart determination of end of input stream data (Brian Croom) + + * Fix unit test timeouts (Carson McDonald) + + * Fix truncated `User-Agent` header field when app contained non-ASCII +characters (Diego Torres) + + * Fix outdated link in documentation (Jonas Schmid) + + * Fix `AFHTTPRequestOperation` `HTTPError` property to be thread-safe +(Oliver Letterer, Mattt Thompson) + + * Fix API compatibility with iOS 5 (Blake Watters, Mattt Thompson) + + * Fix potential race condition in `AFURLConnectionOperation +-cancelConnection` (@mm-jkolb, Mattt Thompson) + + * Remove implementation of `connection:needNewBodyStream:` delegate method +in `AFURLConnectionOperation`, which fixes stream errors on authentication +challenges (Mattt Thompson) + + * Fix calculation of network reachability from flags (Tracy Pesin, Mattt +Thompson) + + * Update AFHTTPClient documentation to clarify scope of `parameterEncoding` +property (Thomas Catterall) + + * Update `UIImageView` category to allow for nested calls to +`setImageWithURLRequest:` (Philippe Converset) + + * Change `UIImageView` category to accept invalid SSL certificates when +`_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_` is defined (Flávio Caetano) + + * Change to replace #pragma clang with cast (Cédric Luthi) + += 1.3.2 (2013-08-08) + + * Add return status checks when building list of pinned public keys (Sylvain +Guillope) + + * Add return status checks when handling connection authentication challenges +(Sylvain Guillope) + + * Add tests around `AFHTTPClient initWithBaseURL:` (Kyle Fuller) + + * Change to remove all `_AFNETWORKING_PIN_SSL_CERTIFICATES_` conditional +compilation (Dustin Barker) + + * Change to allow fallback to generic image loading when PNG/JPEG data +provider methods fail (Darryl H. Thomas) + + * Change to only set placeholder image if not `nil` (Mattt Thompson) + + * Change to use `response.MIMEType` rather than (potentially nonexistent) +Content-Type headers to determine image data provider (Mattt Thompson) + + * Fix image request test endpoint (Carson McDonald) + + * Fix compiler warning caused by `size_t` value defaulted to `NULL` (Darryl H. +Thomas) + + * Fix mutable headers property in `AFHTTPClient -copyWithZone:` (Oliver +Letterer) + + * Fix documentation and asset references in README (Romain Pouclet, Peter +Goldsmith) + + * Fix bug in examples always using `AFSSLPinningModeNone` (Dustin Barker) + + * Fix execution of tests under Travis (Blake Watters) + + * Fix static analyzer warnings about CFRelease calls to NULL pointer (Mattt +Thompson) + + * Change to return early in `AFGetMediaTypeAndSubtypeWithString` if string is +`nil` (Mattt Thompson) + + * Change to opimize network thread creation (Mattt Thompson) + += 1.3.1 (2013-06-18) + + * Add `automaticallyInflatesResponseImage` property to +`AFImageRequestOperation`, which when enabled, offers significant performance +improvements for drawing images loaded through `UIImageView+AFNetworking` by +inflating compressed image data in the background (Mattt Thompson, Peter +Steinberger) + + * Add `NSParameterAssert` check for `nil` `urlRequest` parameter in +`AFURLConnectionOperation` initializer (Kyle Fuller) + + * Fix reachability to detect the case where a connection is required but can +be automatically established (Joshua Vickery) + + * Fix to Test target Podfile (Kyle Fuller) + += 1.3.0 (2013-06-01) + + * Change in `AFURLConnectionOperation` `NSURLConnection` authentication +delegate methods and associated block setters. If +`_AFNETWORKING_PIN_SSL_CERTIFICATES_` is defined, +`-setWillSendRequestForAuthenticationChallengeBlock:` will be available, and +`-connection:willSendRequestForAuthenticationChallenge:` will be implemented. +Otherwise, `-setAuthenticationAgainstProtectionSpaceBlock:` & +`-setAuthenticationChallengeBlock:` will be available, and +`-connection:canAuthenticateAgainstProtectionSpace:` & +`-connection:didReceiveAuthenticationChallenge:` will be implemented instead +(Oliver Letterer) + + * Change in AFNetworking podspec to include Security framework (Kevin Harwood, +Oliver Letterer, Sam Soffes) + + * Change in AFHTTPClient to @throw exception when non-designated intializer is +used (Kyle Fuller) + + * Change in behavior of connection:didReceiveAuthenticationChallenge: to not +use URL-encoded credentials, which should already have been applied (@xjdrew) + + * Change to set AFJSONRequestOperation error when unable to decode response +string (Chris Pickslay, Geoff Nix) + + * Change AFURLConnectionOperation to lazily initialize outputStream property +(@fumoboy007) + + * Change instances of (CFStringRef)NSRunLoopCommonModes to +kCFRunLoopCommonModes + + * Change #warning to #pragma message for dynamic framework linking warnings +(@michael_r_may) + + * Add unit testing and continuous integration system (Blake Watters, Oliver +Letterer, Kevin Harwood, Cédric Luthi, Adam Fraser, Carson McDonald, Mattt +Thompson) + + * Fix multipart input stream implementation (Blake Watters, OliverLetterer, +Aleksey Kononov, @mattyohe, @mythodeia, @JD-) + + * Fix implementation of authentication delegate methods (Oliver Letterer, +Kevin Harwood) + + * Fix implementation of AFSSLPinningModePublicKey on Mac OS X (Oliver Letterer) + + * Fix error caused by loading file:// requests with AFHTTPRequestOperation +subclasses (Dave Anderson, Oliver Letterer) + + * Fix threading-related crash in AFNetworkActivityIndicatorManager (Dave Keck) + + * Fix to suppress GNU expression and enum assignment warnings from Clang +(Henrik Hartz) + + * Fix leak caused by CFStringConvertEncodingToIANACharSetName in AFHTTPClient +-requestWithMethod:path:parameters: (Daniel Demiss) + + * Fix missing __bridge casts in AFHTTPClient (@apouche, Mattt Thompson) + + * Fix Objective-C++ compatibility (Audun Holm Ellertsen) + + * Fix to not escape tildes (@joein3d) + + * Fix warnings caused by unsynthesized properties (Jeff Hunter) + + * Fix to network reachability calls to provide correct status on +initialization (@djmadcat, Mattt Thompson) + + * Fix to suppress warnings about implicit signedness conversion (Matt Rubin) + + * Fix AFJSONRequestOperation -responseJSON failing cases (Andrew Vyazovoy, +Mattt Thompson) + + * Fix use of object subscripting to avoid incompatibility with iOS < 6 and OS +X < 10.8 (Paul Melnikow) + + * Various fixes to reverted multipart stream provider implementation (Yaron +Inger, Alex Burgel) + += 1.2.1 (2013-04-18) + + * Add `allowsInvalidSSLCertificate` property to `AFURLConnectionOperation` and +`AFHTTPClient`, replacing `_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_` macro +(Kevin Harwood) + + * Add SSL pinning mode to example project (Kevin Harwood) + + * Add name to AFNetworking network thread (Peter Steinberger) + + * Change pinned certificates to trust all derived certificates (Oliver +Letterer) + + * Fix documentation about SSL pinning (Kevin Harwood, Mattt Thompson) + + * Fix certain enumerated loops to use fast enumeration, resulting in better +performance (Oliver Letterer) + + * Fix macro to work correctly under Mac OS X 10.7 and iOS 4 SDK (Paul Melnikow) + + * Fix documentation, removing unsupported `@discussion` tags (Michele Titolo) + + * Fix `SecTrustCreateWithCertificates` expecting an array as first argument +(Oliver Letterer) + + * Fix to use `errSecSuccess` instead of `noErr` for Security frameworks +OSStatus (Oliver Letterer) + + * Fix `AFImageRequestOperation` to use `[self alloc]` instead of explicit +class, which allows for subclassing (James Clarke) + + * Fix for `numberOfFinishedOperations` calculations (Rune Madsen) + + * Fix calculation of data length in `-connection:didReceiveData:` +(Jean-Francois Morin) + + * Fix to encode JSON only with UTF-8, following recommendation of +`NSJSONSerialiation` (Sebastian Utz) + += 1.2.0 (2013-03-24) + + * Add `SSLPinningMode` property to `AFHTTPClient` (Oliver Letterer, Kevin +Harwood, Adam Becevello, Dustin Barker, Mattt Thompson) + + * Add single quote ("'"), comma (","), and asterix ("*") to escaped URL +encoding characters (Eric Florenzano, Marc Nijdam, Garrett Murray) + + * Add `credential` property to `AFURLConnectionOperation` (Mattt Thompson) + + * Add `-setDefaultCredential:` to `AFHTTPClient` + + * Add `shouldUseCredentialStorage` property to `AFURLConnectionOperation` +(Mattt Thompson) + + * Add support for repeated key value pairs in `AFHTTPClient` URL query string +(Nick Dawson) + + * Add `AFMultipartFormData - +appendPartWithFileURL:name:fileName:mimeType:error` (Daniel Rodríguez Troitiño) + + * Add `AFMultipartFormData - +appendPartWithInputStream:name:fileName:mimeType:` (@joein3d) + + * Change SSL pinning to be runtime property on `AFURLConnectionOperation` +rather than defined by macro (Oliver Letterer) + + * Change `AFMultipartBodyStream` to `AFMultipartBodyStreamProvider`, vending +one side of a bound CFStream pair rather than subclassing `NSInputStream` (Mike +Ash) + + * Change default `Accept-Language` header in `AFHTTPClient` (@therigu, Mattt +Thompson) + + * Change `AFHTTPClient` operation cancellation to be based on request URL path +rather than absolute URL string (Mattt Thompson) + + * Change request operation subclass processing queues to use +`DISPATCH_QUEUE_CONCURRENT` (Mattt Thompson) + + * Change `UIImageView+AFNetworking` to resolve asymmetry in cached image case +between success block provided and not provided (@Eveets, Mattt Thompson) + + * Change `UIImageView+AFNetworking` to compare `NSURLRequest` instead of +`NSURL` to determine if previous request was equivalent (Cédric Luthi) + + * Change `UIImageView+AFNetworking` to only set image if non-`nil` (Sean +Kovacs) + + * Change indentation settings to four spaces at the project level (Cédric +Luthi) + + * Change `AFNetworkActivityIndicatorManager` to only update if requests have a +non-`nil` URL (Cédric Luthi) + + * Change `UIImageView+AFNetworking` to not do `setHTTPShouldHandleCookies` +(Konstantinos Vaggelakos) + + * Fix request stream exhaustion error on authentication challenges (Alex +Burgel) + + * Fix implementation to use `NSURL` methods instead of `CFURL` functions where +applicable (Cédric Luthi) + + * Fix race condition in `UIImageView+AFNetworking` (Peyman) + + * Fix `responseJSON`, `responseString`, and `responseStringEncoding` to be +threadsafe (Jon Parise, Mattt Thompson) + + * Fix `AFContentTypeForPathExtension` to ensure non-`NULL` content return +value (Zach Waugh) + + * Fix documentation for `appendPartWithFileURL:name:error:` + (Daniel Rodríguez Troitiño) + + * Fix request operation subclass processing queues to initialize with +`dispatch_once` (Sasmito Adibowo) + + * Fix posting of `AFNetworkingOperationDidStartNotification` and +`AFNetworkingOperationDidFinishNotification` to avoid crashes when logging in +response to notifications (Blake Watters) + + * Fix ordering of registered operation consultation in `AFHTTPClient` (Joel +Parsons) + + * Fix warning: multiple methods named 'postNotificationName:object:' found +[-Wstrict-selector-match] (Oliver Jones) + + * Fix warning: multiple methods named 'objectForKey:' found +[-Wstrict-selector-match] (Oliver Jones) + + * Fix warning: weak receiver may be unpredictably set to nil +[-Wreceiver-is-weak] (Oliver Jones) + + * Fix missing #pragma clang diagnostic pop (Steven Fisher) + += 1.1.0 (2012-12-27) + + * Add optional SSL certificate pinning with `#define +_AFNETWORKING_PIN_SSL_CERTIFICATES_` (Dustin Barker) + + * Add `responseStringEncoding` property to `AFURLConnectionOperation` (Mattt +Thompson) + + * Add `userInfo` property to `AFURLConnectionOperation` (Mattt Thompson, +Steven Fisher) + + * Change behavior to cause a failure when an operation is cancelled (Daniel +Tull) + + * Change return type of class constructors to `instancetype` (@guykogus) + + * Change notifications to always being posted on an asynchronously-dispatched +block run on the main queue (Evadne Wu, Mattt Thompson) + + * Change from NSLocalizedString to NSLocalizedStringFromTable with +AFNetworking.strings table for localized strings (Cédric Luthi) + + * Change `-appendPartWithHeaders:body:` to add assertion handler for existence +of body data parameter (Jonathan Beilin) + + * Change `AFHTTPRequestOperation -responseString` to follow guidelines from +RFC 2616 regarding the use of string encoding when none is specified in the +response (Jorge Bernal) + + * Change AFHTTPClient parameter serialization dictionary keys with +`caseInsensitiveCompare:` to ensure + deterministic ordering of query string parameters, which may otherwise + cause ambiguous representations of nested parameters (James Coleman, + Mattt Thompson) + + * Fix -Wstrict-selector-match warnings raised by Xcode 4.6DP3 (Jesse Collis, +Cédric Luthi) + + * Fix NSJSONSerialization crash with Unicode character escapes in JSON +response (Mathijs Kadijk) + + * Fix issue with early return in -startMonitoringNetworkReachability if +network reachability object could not be created (i.e. invalid hostnames) +(Basil Shkara) + + * Fix retain cycles in AFImageRequestOperation.m and AFHTTPClient.m caused by +strong references within blocks (Nick Forge) + + * Fix issue caused by Rails behavior of returning a single space in head :ok +responses, which is interpreted as invalid (Sebastian Ludwig) + + * Fix issue in streaming multipart upload, where final encapsulation boundary +would not be appended if it was larger than the available buffer, causing a +potential timeout (Tomohisa Takaoka, David Kasper) + + * Fix memory leak of network reachability callback block (Mattt Thompson) + + * Fix `-initWithCoder:` for `AFURLConnectionOperation` and `AFHTTPClient` to +cast scalar types (Mattt Thompson) + + * Fix bug in `-enqueueBatchOfHTTPRequestOperations:...` to by using +`addOperations:waitUntilFinished:` instead of adding each operation +individually. (Mattt Thompson) + + * Change `#warning` messages of checks for `CoreServices` and +`MobileCoreServices` to message according to the build target platform (Mattt +Thompson) + + * Change `AFQueryStringFromParametersWithEncoding` to create keys string +representations using the description method as specified in documentation +(Cédric Luthi) + + * Fix __unused keywords for better Xcode indexing (Christian Rasmussen) + + * Fix warning: unused parameter 'x' [-Werror,-Wunused-parameter] (Oliver Jones) + + * Fix warning: property is assumed atomic by default +[-Werror,-Wimplicit-atomic-properties] (Oliver Jones) + + * Fix warning: weak receiver may be unpredictably null in ARC mode +[-Werror,-Wreceiver-is-weak] (Oliver Jones) + + * Fix warning: multiple methods named 'selector' found +[-Werror,-Wstrict-selector-match] (Oliver Jones) + + * Fix warning: 'macro' is not defined, evaluates to 0 (Oliver Jones) + + * Fix warning: atomic by default property 'X' has a user (Oliver Jones)defined +getter (property should be marked 'atomic' if this is intended) [-Werror, +-Wcustom-atomic-properties] (Oliver Jones) + + * Fix warning: 'response' was marked unused but was used +[-Werror,-Wused-but-marked-unused] (Oliver Jones) + + * Fix warning: enumeration value 'AFFinalBoundaryPhase' not explicitly handled +in switch [-Werror,-Wswitch-enum] (Oliver Jones) + += 1.0.1 / 2012-11-01 + + * Fix error in multipart upload streaming, where byte range at boundaries +was not correctly calculated (Stan Chang Khin Boon) + + * If a success block is specified to `UIImageView -setImageWithURLRequest: +placeholderImage:success:failure`:, it is now the responsibility of the +block to set the image of the image view (Mattt Thompson) + + * Add `JSONReadingOptions` property to `AFJSONRequestOperation` (Jeremy + Foo, Mattt Thompson) + + * Using __weak self / __strong self pattern to break retain cycles in + background task and network reachability blocks (Jerry Beers, Dan Weeks) + + * Fix parameter encoding to leave period (`.`) unescaped (Diego Torres) + + * Fixing last file component in multipart form part creation (Sylver + Bruneau) + + * Remove executable permission on AFHTTPClient source files (Andrew + Sardone) + + * Fix warning (error with -Werror) on implicit 64 to 32 conversion (Dan + Weeks) + + * Add GitHub's .gitignore file (Nate Stedman) + + * Updates to README (@ckmcc) + += 1.0 / 2012-10-15 + + * AFNetworking now requires iOS 5 / Mac OSX 10.7 or higher (Mattt Thompson) + + * AFNetworking now uses Automatic Reference Counting (ARC) (Mattt Thompson) + + * AFNetworking raises compiler warnings for missing features when +SystemConfiguration or CoreServices / MobileCoreServices frameworks are not +included in the project and imported in the precompiled headers (Mattt +Thompson) + + * AFNetworking now raises compiler error when not compiled with ARC (Steven +Fisher) + + * Add `NSCoding` and `NSCopying` protocol conformance to +`AFURLConnectionOperation` and `AFHTTPClient` (Mattt Thompson) + + * Add substantial improvements HTTP multipart streaming support, having +files streamed directly from disk and read sequentially from a custom input +stream (Max Lansing, Stan Chang Khin Boon, Mattt Thompson) + + * Add `AFMultipartFormData -throttleBandwidthWithPacketSize:delay:` as +workaround to issues when uploading over 3G (Mattt Thompson) + + * Add request and response to `userInfo` of errors returned from failing +`AFHTTPRequestOperation` (Mattt Thompson) + + * Add `userInfo` dictionary with current status in reachability changes +(Mattt Thompson) + + * Add `Accept` header for image requests in `UIImageView` category (Bratley +Lower) + + * Add explicit declaration of `NSURLConnection` delegate methods so that +they can be overridden in subclasses (Mattt Thompson, Evan Grim) + + * Add parameter validation to match conditions specified in documentation +(Jason Brennan, Mattt Thompson) + + * Add import to `UIKit` to avoid build errors from `UIDevice` references in +`User-Agent` default header (Blake Watters) + + * Remove `AFJSONUtilities` in favor of `NSJSONSerialization` (Mattt Thompson) + + * Remove `extern` declaration of `AFURLEncodedStringFromStringWithEncoding` +function (`CFURLCreateStringByAddingPercentEscapes` should be used instead) +(Mattt Thompson) + + * Remove `setHTTPShouldHandleCookies:NO` from `AFHTTPClient` (@phamsonha, +Mattt Thompson) + + * Remove `dispatch_retain` / `dispatch_release` with ARC in iOS 6 (Benoit +Bourdon) + + * Fix threading issue with `AFNetworkActivityIndicatorManager` (Eric Patey) + + * Fix issue where `AFNetworkActivityIndicatorManager` count could become +negative (@ap4y) + + * Fix properties to explicitly set options to suppress warnings (Wen-Hao +Lue, Mattt Thompson) + + * Fix compiler warning caused by mismatched types in upload / download +progress blocks (Gareth du Plooy, tomas.a) + + * Fix weak / strong variable relationships in `completionBlock` (Peter +Steinberger) + + * Fix string formatting syntax warnings caused by type mismatch (David +Keegan, Steven Fisher, George Cox) + + * Fix minor potential security vulnerability by explicitly using string +format in NSError localizedDescription value in userInfo (Steven Fisher) + + * Fix `AFURLConnectionOperation -pause` by adding state checks to prevent +likely memory issues when resuming (Mattt Thompson) + + * Fix warning caused by miscast of type when +`CLANG_WARN_IMPLICIT_SIGN_CONVERSION` is set (Steven Fisher) + + * Fix incomplete implementation warning in example code (Steven Fisher) + + * Fix warning caused by using `==` comparator on floats (Steven Fisher) + + * Fix iOS 4 bug where file URLs return `NSURLResponse` rather than +`NSHTTPURLResponse` objects (Leo Lobato) + + * Fix calculation of finished operations in batch operation progress +callback (Mattt Thompson) + + * Fix documentation typos (Steven Fisher, Matthias Wessendorf, +jorge@miv.uk.com) + + * Fix `hasAcceptableStatusCode` to return true after a network failure (Tony +Million) + + * Fix warning about missing prototype for private static method (Stephan +Diederich) + + * Fix issue where `nil` content type resulted in unacceptable content type +(Mattt Thompson) + + * Fix bug related to setup and scheduling of output stream (Stephen Tramer) + + * Fix AFContentTypesFromHTTPHeader to correctly handle comma-delimited +content types (Peyman, Mattt Thompson, @jsm174) + + * Fix crash caused by `_networkReachability` not being set to `NULL` after +releasing (Blake Watters) + + * Fix Podspec to correctly import required headers and use ARC (Eloy Durán, +Blake Watters) + + * Fix query string parameter escaping to leave square brackets unescaped +(Mattt Thompson) + + * Fix query string parameter encoding of `NSNull` values (Daniel Rinser) + + * Fix error caused by referencing `__IPHONE_OS_VERSION_MIN_REQUIRED` without +importing `Availability.h` (Blake Watters) + + * Update example to use App.net API, as Twitter shut off its unauthorized +access to the public timeline (Mattt Thompson) + + * Update `AFURLConnectionOperation` to replace `NSAutoReleasePool` with +`@autoreleasepool` (Mattt Thompson) + + * Update `AFHTTPClient` operation queue to specify +`NSOperationQueueDefaultMaxConcurrentOperationCount` rather than +previously-defined constant (Mattt Thompson) + + * Update `AFHTTPClient -initWithBaseURL` to automatically append trailing +slash, so as to fix common issue where default path is not respected without +trailing slash (Steven Fisher) + + * Update default `AFHTTPClient` `User-Agent` header strings (Mattt Thompson, +Steven Fisher) + + * Update icons for iOS example application (Mattt Thompson) + + * Update `numberOfCompletedOperations` variable in progress block to be +renamed to `numberOfFinishedOperations` (Mattt Thompson) + + += 0.10.0 / 2012-06-26 + + * Add Twitter Mac Example application (Mattt Thompson) + + * Add note in README about how to set `-fno-objc-arc` flag for multiple files + at once (Pål Brattberg) + + * Add note in README about 64-bit architecture requirement (@rmuginov, Mattt + Thompson) + + * Add note in `AFNetworkActivityIndicatorManager` about not having to manually + manage animation state (Mattt Thompson) + + * Add missing block parameter name for `imageProcessingBlock` (Francois + Lambert) + + * Add NextiveJson to list of supported JSON libraries (Mattt Thompson) + + * Restore iOS 4.0 compatibility with `addAcceptableStatusCodes:` and + `addAcceptableContentTypes:` (Zachary Waldowski) + + * Update `AFHTTPClient` to use HTTP pipelining for `GET` and `HEAD` requests by + default (Mattt Thompson) + + * Remove @private ivar declaration in headers (Peter Steinberger, Mattt + Thompson) + + * Fix potential premature deallocation of _skippedCharacterSet (Tom Wanielista, + Mattt Thompson) + + * Fix potential issue in `setOutputStream` by closing any existing + `outputStream` (Mattt Thompson) + + * Fix filename in AFHTTPClient header (Steven Fisher) + + * Fix documentation for UIImageView+AFNetworking (Mattt Thompson) + + * Fix HTTP multipart form format, which caused issues with Tornado web server + (Matt Chen) + + * Fix `AFHTTPClient` to not append empty data into multipart form data (Jon + Parise) + + * Fix URL encoding normalization to not conditionally escape percent-encoded + strings (João Prado Maia, Kendall Helmstetter Gelner, @cysp, Mattt Thompson) + + * Fix `AFHTTPClient` documentation reference of + `HTTPRequestOperationWithRequest:success:failure` (Shane Vitarana) + + * Add `AFURLRequestOperation -setRedirectResponseBlock:` (Kevin Harwood) + + * Fix `AFURLConnectionOperation` compilation error by conditionally importing + UIKit framework (Steven Fisher) + + * Fix issue where image processing block is not called correctly with success + block in `AFImageRequestOperation` (Sergey Gavrilyuk) + + * Fix leaked dispatch group in batch operations (@andyegorov, Mattt Thompson) + + * Fix support for non-LLVM compilers in `AFNetworkActivityIndicatorManager` + (Abraham Vegh, Bill Williams, Mattt Thompson) + + * Fix AFHTTPClient to not add unnecessary data when constructing multipart form + request with nil parameters (Taeho Kim) + += 1.0RC1 / 2012-04-25 + + * Add `AFHTTPRequestOperation +addAcceptableStatusCodes / ++addAcceptableContentTypes` to dynamically add acceptable status codes and +content types on the class level (Mattt Thompson) + + * Add support for compound and complex `Accept` headers that include multiple +content types and / or specify a particular character encoding (Mattt Thompson) + + * Add `AFURLConnectionOperation +-setShouldExecuteAsBackgroundTaskWithExpirationHandler:` to have operations +finish once an app becomes inactive (Mattt Thompson) + + * Add support for pausing / resuming request operations (Peter Steinberger, +Mattt Thompson) + + * Improve network reachability functionality in `AFHTTPClient`, including a +distinction between WWan and WiFi reachability (Kevin Harwood, Mattt Thompson) + + += 0.9.2 / 2012-04-25 + + * Add thread safety to `AFNetworkActivityIndicator` (Peter Steinberger, Mattt +Thompson) + + * Document requirement of available JSON libraries for decoding responses in +`AFJSONRequestOperation` and parameter encoding in `AFHTTPClient` (Mattt +Thompson) + + * Fix `AFHTTPClient` parameter encoding (Mattt Thompson) + + * Fix `AFJSONEncode` and `AFJSONDecode` to use `SBJsonWriter` and +`SBJsonParser` instead of `NSObject+SBJson` (Oliver Eikemeier) + + * Fix bug where `AFJSONDecode` does not return errors (Alex Michaud) + + * Fix compiler warning for undeclared +`AFQueryStringComponentFromKeyAndValueWithEncoding` function (Mattt Thompson) + + * Fix cache policy for URL requests (Peter Steinberger) + + * Fix race condition bug in `UIImageView+AFNetworking` caused by incorrectly +nil-ing request operations (John Wu) + + * Fix reload button in Twitter example (Peter Steinberger) + + * Improve batched operation by deferring execution of batch completion block +until all component request completion blocks have finished (Patrick Hernandez, +Kevin Harwood, Mattt Thompson) + + * Improve performance of image request decoding by dispatching to background + queue (Mattt Thompson) + + * Revert `AFImageCache` to cache image objects rather than `NSPurgeableData` +(Tony Million, Peter Steinberger, Mattt Thompson) + + * Remove unnecessary KVO `willChangeValueForKey:` / `didChangeValueForKey:` +calls (Peter Steinberger) + + * Remove unnecessary @private ivar declarations in headers (Peter Steinberger, +Mattt Thompson) + + * Remove @try-@catch block wrapping network thread entry point (Charles T. Ahn) + + += 0.9.1 / 2012-03-19 + + * Create Twitter example application (Mattt Thompson) + + * Add support for nested array and dictionary parameters for query string and +form-encoded requests (Mathieu Hausherr, Josh Chung, Mattt Thompson) + + * Add `AFURLConnectionOperation -setCacheResponseBlock:`, which allows the +behavior of the `NSURLConnectionDelegate` method +`-connection:willCacheResponse:` to be overridden without subclassing (Mattt +Thompson) + + * Add `_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_` macros for +NSURLConnection authentication delegate methods (Mattt Thompson) + + * Add properties for custom success / failure callback queues (Peter +Steinberger) + + * Add notifications for network reachability changes to `AFHTTPClient` (Mattt +Thompson) + + * Add `AFHTTPClient -patchPath:` convenience method (Mattt Thompson) + + * Add support for NextiveJson (Adrian Kosmaczewski) + + * Improve network reachability checks (C. Bess) + + * Improve NSIndexSet formatting in error strings (Jon Parise) + + * Document crashing behavior in iOS 4 loading a file:// URL (Mattt Thompson) + + * Fix crash caused by `AFHTTPClient -cancelAllHTTPOperationsWithMethod:` not +checking operation to be instance of `AFHTTPRequestOperation` (Mattt Thompson) + + * Fix crash caused by passing `nil` URL in requests (Sam Soffes) + + * Fix errors caused by connection property not being nil'd out after an +operation finishes (Kevin Harwood, @zdzisiekpu) + + * Fix crash caused by passing `NULL` error pointer when setting `NSInvocation` +in `AFJSONEncode` and `AFJSONDecode` (Tyler Stromberg) + + * Fix batch operation completion block returning on background thread (Patrick +Hernandez) + + * Fix documentation for UIImageView+AFNetworking (Dominic Dagradi) + + * Fix race condition caused by `AFURLConnectionOperation` being cancelled on +main thread, rather than network thread (Erik Olsson) + + * Fix `AFURLEncodedStringFromStringWithEncoding` to correctly handle cases +where % is used as a literal rather than as part of a percent escape code +(Mattt Thompson) + + * Fix missing comma in `+defaultAcceptableContentTypes` for +`AFImageRequestOperation` (Michael Schneider) + + += 0.9.0 / 2012-01-23 + + * Add thread-safe behavior to `AFURLConnectionOperation` (Mattt Thompson) + + * Add batching of operations for `AFHTTPClient` (Mattt Thompson) + + * Add authentication challenge callback block to override default + implementation of `connection:didReceiveAuthenticationChallenge:` in + `AFURLConnectionOperation` (Mattt Thompson) + + * Add `_AFNETWORKING_PREFER_NSJSONSERIALIZATION_`, which, when defined, + short-circuits the standard preference ordering used in `AFJSONEncode` and + `AFJSONDecode` to use `NSJSONSerialization` when available, falling back on + third-party-libraries. (Mattt Thompson, Shane Vitarana) + + * Add custom `description` for `AFURLConnectionOperation` and `AFHTTPClient` + (Mattt Thompson) + + * Add `text/javascript` to default acceptable content types for + `AFJSONRequestOperation` (Jake Boxer) + + * Add `imageScale` property to change resolution of images constructed from + cached data (Štěpán Petrů) + + * Add note about third party JSON libraries in README (David Keegan) + + * `AFQueryStringFromParametersWithEncoding` formats `NSArray` values in the + form `key[]=value1&key[]=value2` instead of `key=(value1,value2)` (Dan Thorpe) + + * `AFImageRequestOperation -responseImage` on OS X uses `NSBitmapImageRep` to + determine the correct pixel dimensions of the image (David Keegan) + + * `AFURLConnectionOperation` `connection` has memory management policy `assign` + to avoid retain cycles caused by `NSURLConnection` retaining its delegate + (Mattt Thompson) + + * `AFURLConnectionOperation` calls super implementation for `-isReady`, + following the guidelines for `NSOperation` subclasses (Mattt Thompson) + + * `UIImageView -setImageWithURL:` and related methods call success callback + after setting image (Cameron Boehmer) + + * Cancel request if an authentication challenge has no suitable credentials in + `AFURLConnectionOperation -connection:didReceiveAuthenticationChallenge:` + (Jorge Bernal) + + * Remove exception from + `multipartFormRequestWithMethod:path:parameters:constructing BodyWithBlock:` + raised when certain HTTP methods are used. (Mattt Thompson) + + * Remove `AFImageCache` from public API, moving it into private implementation + of `UIImageView+AFNetworking` (Mattt Thompson) + + * Mac example application makes better use of AppKit technologies and + conventions (Mattt Thompson) + + * Fix issue with multipart form boundaries in `AFHTTPClient + -multipartFormRequestWithMethod:path:parameters:constructing BodyWithBlock:` + (Ray Morgan, Mattt Thompson, Sam Soffes) + + * Fix "File Upload with Progress Callback" code snippet in README (Larry +Legend) + + * Fix to SBJSON invocations in `AFJSONEncode` and `AFJSONDecode` (Matthias + Tretter, James Frye) + + * Fix documentation for `AFHTTPClient requestWithMethod:path:parameters:` + (Michael Parker) + + * Fix `Content-Disposition` headers used for multipart form construction + (Michael Parker) + + * Add network reachability status change callback property to `AFHTTPClient`. + (Mattt Thompson, Kevin Harwood) + + * Fix exception handling in `AFJSONEncode` and `AFJSONDecode` (David Keegan) + + * Fix `NSData` initialization with string in `AFBase64EncodedStringFromString` + (Adam Ernst, Mattt Thompson) + + * Fix error check in `appendPartWithFileURL:name:error:` (Warren Moore, + Baldoph, Mattt Thompson) + + * Fix compiler warnings for certain configurations (Charlie Williams) + + * Fix bug caused by passing zero-length `responseData` to response object + initializers (Mattt Thompson, Serge Paquet) diff --git a/AFNetworking-master/CONTRIBUTING.md b/AFNetworking-master/CONTRIBUTING.md new file mode 100755 index 0000000..5de3be7 --- /dev/null +++ b/AFNetworking-master/CONTRIBUTING.md @@ -0,0 +1,91 @@ +# Contributing Guidelines + +This document contains information and guidelines about contributing to this project. +Please read it before you start participating. + +**Topics** + +* [Asking Questions](#asking-questions) +* [Reporting Security Issues](#reporting-security-issues) +* [Reporting Issues](#reporting-other-issues) +* [Developers Certificate of Origin](#developers-certificate-of-origin) +* [Code of Conduct](#code-of-conduct) + +## Asking Questions + +We don't use GitHub as a support forum. +For any usage questions that are not specific to the project itself, +please ask on [Stack Overflow](https://stackoverflow.com) instead. +By doing so, you'll be more likely to quickly solve your problem, +and you'll allow anyone else with the same question to find the answer. +This also allows maintainers to focus on improving the project for others. + +## Reporting Security Issues + +The Alamofire Software Foundation takes security seriously. +If you discover a security issue, please bring it to our attention right away! + +Please **DO NOT** file a public issue, +instead send your report privately to . +This will help ensure that any vulnerabilities that _are_ found +can be [disclosed responsibly](http://en.wikipedia.org/wiki/Responsible_disclosure) +to any affected parties. + +## Reporting Other Issues + +A great way to contribute to the project +is to send a detailed issue when you encounter an problem. +We always appreciate a well-written, thorough bug report. + +Check that the project issues database +doesn't already include that problem or suggestion before submitting an issue. +If you find a match, add a quick "+1" or "I have this problem too." +Doing this helps prioritize the most common problems and requests. + +When reporting issues, please include the following: + +* The version of Xcode you're using +* The version of iOS or OS X you're targeting +* The full output of any stack trace or compiler error +* A code snippet that reproduces the described behavior, if applicable +* Any other details that would be useful in understanding the problem + +This information will help us review and fix your issue faster. + +## Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +- (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +- (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +- (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +- (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +## Code of Conduct + +The Code of Conduct governs how we behave in public or in private +whenever the project will be judged by our actions. +We expect it to be honored by everyone who contributes to this project. + +See [CONDUCT.md](https://github.com/Alamofire/Foundation/blob/master/CONDUCT.md) for details. + +--- + +*Some of the ideas and wording for the statements above were based on work by the [Docker](https://github.com/docker/docker/blob/master/CONTRIBUTING.md) and [Linux](http://elinux.org/Developer_Certificate_Of_Origin) communities. We commend them for their efforts to facilitate collaboration in their projects.* diff --git a/AFNetworking-master/Example/AFNetworking Example.entitlements b/AFNetworking-master/Example/AFNetworking Example.entitlements new file mode 100755 index 0000000..7a2230d --- /dev/null +++ b/AFNetworking-master/Example/AFNetworking Example.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.network.server + + + diff --git a/AFNetworking-master/Example/AFNetworking OS X Example.xcodeproj/project.pbxproj b/AFNetworking-master/Example/AFNetworking OS X Example.xcodeproj/project.pbxproj new file mode 100755 index 0000000..0d4635f --- /dev/null +++ b/AFNetworking-master/Example/AFNetworking OS X Example.xcodeproj/project.pbxproj @@ -0,0 +1,403 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7756506D18037FAB00A437A8 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756505918037FAB00A437A8 /* AFHTTPRequestOperation.m */; }; + 7756506E18037FAB00A437A8 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756505B18037FAB00A437A8 /* AFHTTPRequestOperationManager.m */; }; + 7756506F18037FAB00A437A8 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756505D18037FAB00A437A8 /* AFHTTPSessionManager.m */; }; + 7756507018037FAB00A437A8 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506018037FAB00A437A8 /* AFNetworkReachabilityManager.m */; }; + 7756507118037FAB00A437A8 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506218037FAB00A437A8 /* AFSecurityPolicy.m */; }; + 7756507218037FAB00A437A8 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506418037FAB00A437A8 /* AFURLConnectionOperation.m */; }; + 7756507318037FAB00A437A8 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506618037FAB00A437A8 /* AFURLRequestSerialization.m */; }; + 7756507418037FAB00A437A8 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506818037FAB00A437A8 /* AFURLResponseSerialization.m */; }; + 7756507518037FAB00A437A8 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7756506A18037FAB00A437A8 /* AFURLSessionManager.m */; }; + B304CCE8177D58DD00F4FC85 /* adn.cer in Resources */ = {isa = PBXBuildFile; fileRef = B304CCE7177D58DD00F4FC85 /* adn.cer */; }; + F8129C001591061B009BFE23 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8129BFF1591061B009BFE23 /* Cocoa.framework */; }; + F8129C321591073C009BFE23 /* AFAppDotNetAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */; }; + F8129C341591073C009BFE23 /* Post.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C2B1591073C009BFE23 /* Post.m */; }; + F8129C351591073C009BFE23 /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C2D1591073C009BFE23 /* User.m */; }; + F8129C6F15910B15009BFE23 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C6E15910B15009BFE23 /* main.m */; }; + F8129C7115910B3E009BFE23 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8129C7015910B3E009BFE23 /* MainMenu.xib */; }; + F8129C7715910C40009BFE23 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C7515910C40009BFE23 /* AppDelegate.m */; }; + F88812F216C533E9003C8B8C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F88812F116C533E9003C8B8C /* Security.framework */; }; + F8A847CF161F55A500940F39 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8A847CE161F55A500940F39 /* CoreServices.framework */; }; + F8A847D2161F55AC00940F39 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8A847D1161F55AC00940F39 /* SystemConfiguration.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7756505818037FAB00A437A8 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; + 7756505918037FAB00A437A8 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; + 7756505A18037FAB00A437A8 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 7756505B18037FAB00A437A8 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 7756505C18037FAB00A437A8 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; + 7756505D18037FAB00A437A8 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; + 7756505E18037FAB00A437A8 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; + 7756505F18037FAB00A437A8 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; + 7756506018037FAB00A437A8 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; + 7756506118037FAB00A437A8 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; + 7756506218037FAB00A437A8 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; + 7756506318037FAB00A437A8 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; + 7756506418037FAB00A437A8 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; + 7756506518037FAB00A437A8 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; + 7756506618037FAB00A437A8 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; + 7756506718037FAB00A437A8 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; + 7756506818037FAB00A437A8 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; + 7756506918037FAB00A437A8 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; + 7756506A18037FAB00A437A8 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; + B304CCE7177D58DD00F4FC85 /* adn.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = adn.cer; sourceTree = SOURCE_ROOT; }; + F8129BFB1591061B009BFE23 /* AFNetworking Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AFNetworking Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + F8129BFF1591061B009BFE23 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + F8129C021591061B009BFE23 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + F8129C031591061B009BFE23 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + F8129C041591061B009BFE23 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFAppDotNetAPIClient.m; path = Classes/AFAppDotNetAPIClient.m; sourceTree = SOURCE_ROOT; }; + F8129C2A1591073C009BFE23 /* Post.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Post.h; sourceTree = ""; }; + F8129C2B1591073C009BFE23 /* Post.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Post.m; sourceTree = ""; }; + F8129C2C1591073C009BFE23 /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = ""; }; + F8129C2D1591073C009BFE23 /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = ""; }; + F8129C311591073C009BFE23 /* AFAppDotNetAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFAppDotNetAPIClient.h; path = Classes/AFAppDotNetAPIClient.h; sourceTree = SOURCE_ROOT; }; + F8129C6E15910B15009BFE23 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; }; + F8129C7015910B3E009BFE23 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = SOURCE_ROOT; }; + F8129C7515910C40009BFE23 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; + F8129C7615910C40009BFE23 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; + F877018B159A1CE700B45C0D /* AFNetworking Example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "AFNetworking Example.entitlements"; sourceTree = ""; }; + F88812F116C533E9003C8B8C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + F8A847CE161F55A500940F39 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; + F8A847D1161F55AC00940F39 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F8129BF81591061B009BFE23 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F88812F216C533E9003C8B8C /* Security.framework in Frameworks */, + F8A847D2161F55AC00940F39 /* SystemConfiguration.framework in Frameworks */, + F8A847CF161F55A500940F39 /* CoreServices.framework in Frameworks */, + F8129C001591061B009BFE23 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7756505518037FAB00A437A8 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 7756505818037FAB00A437A8 /* AFHTTPRequestOperation.h */, + 7756505918037FAB00A437A8 /* AFHTTPRequestOperation.m */, + 7756505A18037FAB00A437A8 /* AFHTTPRequestOperationManager.h */, + 7756505B18037FAB00A437A8 /* AFHTTPRequestOperationManager.m */, + 7756505C18037FAB00A437A8 /* AFHTTPSessionManager.h */, + 7756505D18037FAB00A437A8 /* AFHTTPSessionManager.m */, + 7756505E18037FAB00A437A8 /* AFNetworking.h */, + 7756505F18037FAB00A437A8 /* AFNetworkReachabilityManager.h */, + 7756506018037FAB00A437A8 /* AFNetworkReachabilityManager.m */, + 7756506118037FAB00A437A8 /* AFSecurityPolicy.h */, + 7756506218037FAB00A437A8 /* AFSecurityPolicy.m */, + 7756506318037FAB00A437A8 /* AFURLConnectionOperation.h */, + 7756506418037FAB00A437A8 /* AFURLConnectionOperation.m */, + 7756506518037FAB00A437A8 /* AFURLRequestSerialization.h */, + 7756506618037FAB00A437A8 /* AFURLRequestSerialization.m */, + 7756506718037FAB00A437A8 /* AFURLResponseSerialization.h */, + 7756506818037FAB00A437A8 /* AFURLResponseSerialization.m */, + 7756506918037FAB00A437A8 /* AFURLSessionManager.h */, + 7756506A18037FAB00A437A8 /* AFURLSessionManager.m */, + ); + name = AFNetworking; + path = ../AFNetworking; + sourceTree = ""; + }; + F8129BF01591061B009BFE23 = { + isa = PBXGroup; + children = ( + F88812F116C533E9003C8B8C /* Security.framework */, + F8A847D1161F55AC00940F39 /* SystemConfiguration.framework */, + F8A847CE161F55A500940F39 /* CoreServices.framework */, + F877018B159A1CE700B45C0D /* AFNetworking Example.entitlements */, + F8129C051591061B009BFE23 /* Classes */, + F8129C4C15910901009BFE23 /* Vendor */, + F8129BFE1591061B009BFE23 /* Frameworks */, + F8129BFC1591061B009BFE23 /* Products */, + ); + indentWidth = 4; + sourceTree = ""; + tabWidth = 4; + usesTabs = 0; + }; + F8129BFC1591061B009BFE23 /* Products */ = { + isa = PBXGroup; + children = ( + F8129BFB1591061B009BFE23 /* AFNetworking Example.app */, + ); + name = Products; + sourceTree = ""; + }; + F8129BFE1591061B009BFE23 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F8129BFF1591061B009BFE23 /* Cocoa.framework */, + F8129C011591061B009BFE23 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + F8129C011591061B009BFE23 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + F8129C021591061B009BFE23 /* AppKit.framework */, + F8129C031591061B009BFE23 /* CoreData.framework */, + F8129C041591061B009BFE23 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + F8129C051591061B009BFE23 /* Classes */ = { + isa = PBXGroup; + children = ( + F8129C311591073C009BFE23 /* AFAppDotNetAPIClient.h */, + F8129C251591073C009BFE23 /* AFAppDotNetAPIClient.m */, + F8129C7615910C40009BFE23 /* AppDelegate.h */, + F8129C7515910C40009BFE23 /* AppDelegate.m */, + F8129C291591073C009BFE23 /* Models */, + F8129C061591061B009BFE23 /* Supporting Files */, + ); + name = Classes; + path = "AFNetworking-Mac-Example"; + sourceTree = ""; + }; + F8129C061591061B009BFE23 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + B304CCE7177D58DD00F4FC85 /* adn.cer */, + F8129C6E15910B15009BFE23 /* main.m */, + F8129C7015910B3E009BFE23 /* MainMenu.xib */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F8129C291591073C009BFE23 /* Models */ = { + isa = PBXGroup; + children = ( + F8129C2A1591073C009BFE23 /* Post.h */, + F8129C2B1591073C009BFE23 /* Post.m */, + F8129C2C1591073C009BFE23 /* User.h */, + F8129C2D1591073C009BFE23 /* User.m */, + ); + name = Models; + path = Classes/Models; + sourceTree = SOURCE_ROOT; + }; + F8129C4C15910901009BFE23 /* Vendor */ = { + isa = PBXGroup; + children = ( + 7756505518037FAB00A437A8 /* AFNetworking */, + ); + name = Vendor; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F8129BFA1591061B009BFE23 /* AFNetworking Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F8129C191591061B009BFE23 /* Build configuration list for PBXNativeTarget "AFNetworking Example" */; + buildPhases = ( + F8129BF71591061B009BFE23 /* Sources */, + F8129BF81591061B009BFE23 /* Frameworks */, + F8129BF91591061B009BFE23 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "AFNetworking Example"; + productName = "AFNetworking-Mac-Example"; + productReference = F8129BFB1591061B009BFE23 /* AFNetworking Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F8129BF21591061B009BFE23 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + }; + buildConfigurationList = F8129BF51591061B009BFE23 /* Build configuration list for PBXProject "AFNetworking OS X Example" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = F8129BF01591061B009BFE23; + productRefGroup = F8129BFC1591061B009BFE23 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F8129BFA1591061B009BFE23 /* AFNetworking Example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F8129BF91591061B009BFE23 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F8129C7115910B3E009BFE23 /* MainMenu.xib in Resources */, + B304CCE8177D58DD00F4FC85 /* adn.cer in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F8129BF71591061B009BFE23 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7756507218037FAB00A437A8 /* AFURLConnectionOperation.m in Sources */, + 7756506D18037FAB00A437A8 /* AFHTTPRequestOperation.m in Sources */, + 7756507018037FAB00A437A8 /* AFNetworkReachabilityManager.m in Sources */, + 7756507518037FAB00A437A8 /* AFURLSessionManager.m in Sources */, + 7756507318037FAB00A437A8 /* AFURLRequestSerialization.m in Sources */, + F8129C341591073C009BFE23 /* Post.m in Sources */, + 7756507418037FAB00A437A8 /* AFURLResponseSerialization.m in Sources */, + F8129C351591073C009BFE23 /* User.m in Sources */, + F8129C321591073C009BFE23 /* AFAppDotNetAPIClient.m in Sources */, + 7756506E18037FAB00A437A8 /* AFHTTPRequestOperationManager.m in Sources */, + 7756507118037FAB00A437A8 /* AFSecurityPolicy.m in Sources */, + F8129C6F15910B15009BFE23 /* main.m in Sources */, + F8129C7715910C40009BFE23 /* AppDelegate.m in Sources */, + 7756506F18037FAB00A437A8 /* AFHTTPSessionManager.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F8129C171591061B009BFE23 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + F8129C181591061B009BFE23 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + SDKROOT = macosx; + }; + name = Release; + }; + F8129C1A1591061B009BFE23 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "AFNetworking Example.entitlements"; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + INFOPLIST_FILE = "Mac-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + F8129C1B1591061B009BFE23 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "AFNetworking Example.entitlements"; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + INFOPLIST_FILE = "Mac-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F8129BF51591061B009BFE23 /* Build configuration list for PBXProject "AFNetworking OS X Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F8129C171591061B009BFE23 /* Debug */, + F8129C181591061B009BFE23 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F8129C191591061B009BFE23 /* Build configuration list for PBXNativeTarget "AFNetworking Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F8129C1A1591061B009BFE23 /* Debug */, + F8129C1B1591061B009BFE23 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F8129BF21591061B009BFE23 /* Project object */; +} diff --git a/AFNetworking-master/Example/AFNetworking iOS Example.xcodeproj/project.pbxproj b/AFNetworking-master/Example/AFNetworking iOS Example.xcodeproj/project.pbxproj new file mode 100755 index 0000000..9a982d7 --- /dev/null +++ b/AFNetworking-master/Example/AFNetworking iOS Example.xcodeproj/project.pbxproj @@ -0,0 +1,637 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 297F56CA17A9B1AB0014D95C /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 297F56C917A9B1AB0014D95C /* AFSecurityPolicy.m */; }; + 2982AD3217107C0000FFF048 /* adn.cer in Resources */ = {isa = PBXBuildFile; fileRef = 2982AD3117107C0000FFF048 /* adn.cer */; }; + E8C2E7A618970EE40097DCC8 /* root_ca.cer in Resources */ = {isa = PBXBuildFile; fileRef = E8C2E7A418970EE00097DCC8 /* root_ca.cer */; }; + E8C2E7A718970EE40097DCC8 /* digicert_ca_3.cer in Resources */ = {isa = PBXBuildFile; fileRef = E8C2E7A518970EE00097DCC8 /* digicert_ca_3.cer */; }; + F8129C7415910C37009BFE23 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C7215910C37009BFE23 /* AppDelegate.m */; }; + F818101615E6A0C600EF93C2 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ABD6EC159FC2CE001BE42C /* MobileCoreServices.framework */; }; + F8664A2018AA99F5007D8554 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */; }; + F86A37E0177397D900407E52 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F86A37DF177397D900407E52 /* AFURLSessionManager.m */; }; + F88812F016C533D6003C8B8C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469E013957DF100DB05C8 /* Security.framework */; }; + F8A847C1161F51A300940F39 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8A847C0161F51A300940F39 /* Default-568h@2x.png */; }; + F8A847C3161F523E00940F39 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = F8A847C2161F523E00940F39 /* Default.png */; }; + F8A847C5161F524200940F39 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8A847C4161F524200940F39 /* Default@2x.png */; }; + F8B3944D17DBF9B900430F25 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B3944C17DBF9B900430F25 /* AFHTTPRequestOperationManager.m */; }; + F8CBED2317D595320088ADC0 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8CBED2217D595320088ADC0 /* UIAlertView+AFNetworking.m */; }; + F8D0701B14310F4A00653FD3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469E213957DF700DB05C8 /* SystemConfiguration.framework */; }; + F8D5499A17DB0EF300BFF314 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D5499917DB0EF300BFF314 /* AFURLResponseSerialization.m */; }; + F8D5499D17DB0EFE00BFF314 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D5499C17DB0EFE00BFF314 /* AFURLRequestSerialization.m */; }; + F8D549A017DB1C9100BFF314 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D5499F17DB1C9100BFF314 /* AFNetworkReachabilityManager.m */; }; + F8DA09E41396AC040057D0CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09E31396AC040057D0CC /* main.m */; }; + F8E02CF7177A8B710087BB23 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CEC177A8B710087BB23 /* AFNetworkActivityIndicatorManager.m */; }; + F8E02CF8177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CEE177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.m */; }; + F8E02CF9177A8B710087BB23 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CF0177A8B710087BB23 /* UIButton+AFNetworking.m */; }; + F8E02CFA177A8B710087BB23 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CF2177A8B710087BB23 /* UIImageView+AFNetworking.m */; }; + F8E02CFB177A8B710087BB23 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CF4177A8B710087BB23 /* UIProgressView+AFNetworking.m */; }; + F8E02CFC177A8B710087BB23 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E02CF6177A8B710087BB23 /* UIWebView+AFNetworking.m */; }; + F8E469651395739D00DB05C8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469641395739D00DB05C8 /* UIKit.framework */; }; + F8E469671395739D00DB05C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469661395739D00DB05C8 /* Foundation.framework */; }; + F8E469691395739D00DB05C8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469681395739D00DB05C8 /* CoreGraphics.framework */; }; + F8E469DF13957DD500DB05C8 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469DE13957DD500DB05C8 /* CoreLocation.framework */; }; + F8F6E8DC1463424800AD016F /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = F8F6E8D81463424800AD016F /* Icon.png */; }; + F8F6E8DD1463424800AD016F /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8F6E8D91463424800AD016F /* Icon@2x.png */; }; + F8FA9491150EF8C100ED4EAD /* AFAppDotNetAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */; }; + F8FA9494150EF97E00ED4EAD /* Post.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9493150EF97E00ED4EAD /* Post.m */; }; + F8FA9497150EF98800ED4EAD /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9496150EF98800ED4EAD /* User.m */; }; + F8FA949A150EF9DA00ED4EAD /* GlobalTimelineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */; }; + F8FA94B1150EFEC100ED4EAD /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA949D150EFEC100ED4EAD /* AFHTTPSessionManager.m */; }; + F8FA94B2150EFEC100ED4EAD /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA949F150EFEC100ED4EAD /* AFHTTPRequestOperation.m */; }; + F8FA94B8150EFEC100ED4EAD /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94AC150EFEC100ED4EAD /* AFURLConnectionOperation.m */; }; + F8FA94C1150F019100ED4EAD /* PostTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */; }; + F8FA94D0150F094D00ED4EAD /* profile-image-placeholder.png in Resources */ = {isa = PBXBuildFile; fileRef = F8FA94CC150F094D00ED4EAD /* profile-image-placeholder.png */; }; + F8FA94D1150F094D00ED4EAD /* profile-image-placeholder@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8FA94CD150F094D00ED4EAD /* profile-image-placeholder@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 297F56C817A9B1AB0014D95C /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; + 297F56C917A9B1AB0014D95C /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; + 2982AD3117107C0000FFF048 /* adn.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = adn.cer; sourceTree = SOURCE_ROOT; }; + 50ABD6EC159FC2CE001BE42C /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + 55BDA27E17F5A434005DB933 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIKit+AFNetworking.h"; sourceTree = ""; }; + E8C2E7A418970EE00097DCC8 /* root_ca.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = root_ca.cer; sourceTree = SOURCE_ROOT; }; + E8C2E7A518970EE00097DCC8 /* digicert_ca_3.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = digicert_ca_3.cer; sourceTree = SOURCE_ROOT; }; + F8129C3815910830009BFE23 /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = SOURCE_ROOT; }; + F8129C7215910C37009BFE23 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; + F8129C7315910C37009BFE23 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; + F8664A1E18AA99F5007D8554 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + F86A37DE177397D900407E52 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; + F86A37DF177397D900407E52 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; + F8A847C0161F51A300940F39 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + F8A847C2161F523E00940F39 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + F8A847C4161F524200940F39 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + F8B3944B17DBF9B900430F25 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = ""; }; + F8B3944C17DBF9B900430F25 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = ""; }; + F8CBED2117D595320088ADC0 /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAlertView+AFNetworking.h"; sourceTree = ""; }; + F8CBED2217D595320088ADC0 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAlertView+AFNetworking.m"; sourceTree = ""; }; + F8D5499817DB0EF300BFF314 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; + F8D5499917DB0EF300BFF314 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; + F8D5499B17DB0EFE00BFF314 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; + F8D5499C17DB0EFE00BFF314 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; + F8D5499E17DB1C9100BFF314 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; + F8D5499F17DB1C9100BFF314 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; + F8DA09E31396AC040057D0CC /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; }; + F8E02CEB177A8B710087BB23 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + F8E02CEC177A8B710087BB23 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + F8E02CED177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + F8E02CEE177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + F8E02CEF177A8B710087BB23 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+AFNetworking.h"; sourceTree = ""; }; + F8E02CF0177A8B710087BB23 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+AFNetworking.m"; sourceTree = ""; }; + F8E02CF1177A8B710087BB23 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+AFNetworking.h"; sourceTree = ""; }; + F8E02CF2177A8B710087BB23 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+AFNetworking.m"; sourceTree = ""; }; + F8E02CF3177A8B710087BB23 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIProgressView+AFNetworking.h"; sourceTree = ""; }; + F8E02CF4177A8B710087BB23 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIProgressView+AFNetworking.m"; sourceTree = ""; }; + F8E02CF5177A8B710087BB23 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+AFNetworking.h"; sourceTree = ""; }; + F8E02CF6177A8B710087BB23 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = ""; }; + F8E469601395739C00DB05C8 /* AFNetworking iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AFNetworking iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + F8E469641395739D00DB05C8 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + F8E469661395739D00DB05C8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + F8E469681395739D00DB05C8 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + F8E4696C1395739D00DB05C8 /* iOS-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "iOS-Info.plist"; sourceTree = ""; }; + F8E469DE13957DD500DB05C8 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + F8E469E013957DF100DB05C8 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + F8E469E213957DF700DB05C8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + F8F6E8D81463424800AD016F /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = SOURCE_ROOT; }; + F8F6E8D91463424800AD016F /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = SOURCE_ROOT; }; + F8FA948F150EF8C100ED4EAD /* AFAppDotNetAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFAppDotNetAPIClient.h; path = Classes/AFAppDotNetAPIClient.h; sourceTree = ""; }; + F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFAppDotNetAPIClient.m; path = Classes/AFAppDotNetAPIClient.m; sourceTree = ""; }; + F8FA9492150EF97E00ED4EAD /* Post.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Post.h; sourceTree = ""; }; + F8FA9493150EF97E00ED4EAD /* Post.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Post.m; sourceTree = ""; }; + F8FA9495150EF98800ED4EAD /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = ""; }; + F8FA9496150EF98800ED4EAD /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = ""; }; + F8FA9498150EF9DA00ED4EAD /* GlobalTimelineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalTimelineViewController.h; sourceTree = ""; }; + F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GlobalTimelineViewController.m; sourceTree = ""; }; + F8FA949C150EFEC100ED4EAD /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; + F8FA949D150EFEC100ED4EAD /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; + F8FA949E150EFEC100ED4EAD /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; + F8FA949F150EFEC100ED4EAD /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; + F8FA94A8150EFEC100ED4EAD /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; + F8FA94AB150EFEC100ED4EAD /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; + F8FA94AC150EFEC100ED4EAD /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; + F8FA94BF150F019100ED4EAD /* PostTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostTableViewCell.h; sourceTree = ""; }; + F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PostTableViewCell.m; sourceTree = ""; }; + F8FA94CC150F094D00ED4EAD /* profile-image-placeholder.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-image-placeholder.png"; path = "Images/profile-image-placeholder.png"; sourceTree = SOURCE_ROOT; }; + F8FA94CD150F094D00ED4EAD /* profile-image-placeholder@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-image-placeholder@2x.png"; path = "Images/profile-image-placeholder@2x.png"; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F8E4695D1395739C00DB05C8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F88812F016C533D6003C8B8C /* Security.framework in Frameworks */, + F8E469651395739D00DB05C8 /* UIKit.framework in Frameworks */, + F8E469671395739D00DB05C8 /* Foundation.framework in Frameworks */, + F8E469691395739D00DB05C8 /* CoreGraphics.framework in Frameworks */, + F8E469DF13957DD500DB05C8 /* CoreLocation.framework in Frameworks */, + F8D0701B14310F4A00653FD3 /* SystemConfiguration.framework in Frameworks */, + F818101615E6A0C600EF93C2 /* MobileCoreServices.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F8D549A117DBE52C00BFF314 /* Serialization */ = { + isa = PBXGroup; + children = ( + F8D5499B17DB0EFE00BFF314 /* AFURLRequestSerialization.h */, + F8D5499C17DB0EFE00BFF314 /* AFURLRequestSerialization.m */, + F8D5499817DB0EF300BFF314 /* AFURLResponseSerialization.h */, + F8D5499917DB0EF300BFF314 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + F8D549A217DBE53B00BFF314 /* NSURLSession */ = { + isa = PBXGroup; + children = ( + F86A37DE177397D900407E52 /* AFURLSessionManager.h */, + F86A37DF177397D900407E52 /* AFURLSessionManager.m */, + F8FA949C150EFEC100ED4EAD /* AFHTTPSessionManager.h */, + F8FA949D150EFEC100ED4EAD /* AFHTTPSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + F8D549A317DBE54700BFF314 /* NSURLConnection */ = { + isa = PBXGroup; + children = ( + F8FA94AB150EFEC100ED4EAD /* AFURLConnectionOperation.h */, + F8FA94AC150EFEC100ED4EAD /* AFURLConnectionOperation.m */, + F8FA949E150EFEC100ED4EAD /* AFHTTPRequestOperation.h */, + F8FA949F150EFEC100ED4EAD /* AFHTTPRequestOperation.m */, + F8B3944B17DBF9B900430F25 /* AFHTTPRequestOperationManager.h */, + F8B3944C17DBF9B900430F25 /* AFHTTPRequestOperationManager.m */, + ); + name = NSURLConnection; + sourceTree = ""; + }; + F8D549A417DBE54F00BFF314 /* Reachability */ = { + isa = PBXGroup; + children = ( + F8D5499E17DB1C9100BFF314 /* AFNetworkReachabilityManager.h */, + F8D5499F17DB1C9100BFF314 /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + F8D549A517DBE55400BFF314 /* Security */ = { + isa = PBXGroup; + children = ( + 297F56C817A9B1AB0014D95C /* AFSecurityPolicy.h */, + 297F56C917A9B1AB0014D95C /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + F8DA09C61396AB690057D0CC /* Controllers */ = { + isa = PBXGroup; + children = ( + F8FA9498150EF9DA00ED4EAD /* GlobalTimelineViewController.h */, + F8FA9499150EF9DA00ED4EAD /* GlobalTimelineViewController.m */, + ); + name = Controllers; + path = Classes/Controllers; + sourceTree = SOURCE_ROOT; + }; + F8DA09C91396AB690057D0CC /* Models */ = { + isa = PBXGroup; + children = ( + F8FA9492150EF97E00ED4EAD /* Post.h */, + F8FA9493150EF97E00ED4EAD /* Post.m */, + F8FA9495150EF98800ED4EAD /* User.h */, + F8FA9496150EF98800ED4EAD /* User.m */, + ); + name = Models; + path = Classes/Models; + sourceTree = SOURCE_ROOT; + }; + F8DA09CC1396AB690057D0CC /* Views */ = { + isa = PBXGroup; + children = ( + F8FA94BF150F019100ED4EAD /* PostTableViewCell.h */, + F8FA94C0150F019100ED4EAD /* PostTableViewCell.m */, + ); + name = Views; + path = Classes/Views; + sourceTree = SOURCE_ROOT; + }; + F8E02CEA177A8B710087BB23 /* UIKit+AFNetworking */ = { + isa = PBXGroup; + children = ( + 55BDA27E17F5A434005DB933 /* UIKit+AFNetworking.h */, + F8E02CEB177A8B710087BB23 /* AFNetworkActivityIndicatorManager.h */, + F8E02CEC177A8B710087BB23 /* AFNetworkActivityIndicatorManager.m */, + F8E02CED177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.h */, + F8E02CEE177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.m */, + F8CBED2117D595320088ADC0 /* UIAlertView+AFNetworking.h */, + F8CBED2217D595320088ADC0 /* UIAlertView+AFNetworking.m */, + F8E02CEF177A8B710087BB23 /* UIButton+AFNetworking.h */, + F8E02CF0177A8B710087BB23 /* UIButton+AFNetworking.m */, + F8E02CF1177A8B710087BB23 /* UIImageView+AFNetworking.h */, + F8E02CF2177A8B710087BB23 /* UIImageView+AFNetworking.m */, + F8E02CF3177A8B710087BB23 /* UIProgressView+AFNetworking.h */, + F8E02CF4177A8B710087BB23 /* UIProgressView+AFNetworking.m */, + F8664A1E18AA99F5007D8554 /* UIRefreshControl+AFNetworking.h */, + F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */, + F8E02CF5177A8B710087BB23 /* UIWebView+AFNetworking.h */, + F8E02CF6177A8B710087BB23 /* UIWebView+AFNetworking.m */, + ); + name = "UIKit+AFNetworking"; + path = "../UIKit+AFNetworking"; + sourceTree = ""; + }; + F8E469551395739C00DB05C8 = { + isa = PBXGroup; + children = ( + F8A847C2161F523E00940F39 /* Default.png */, + F8A847C4161F524200940F39 /* Default@2x.png */, + F8A847C0161F51A300940F39 /* Default-568h@2x.png */, + F8E469B71395759C00DB05C8 /* Networking Extensions */, + F8E4696A1395739D00DB05C8 /* Classes */, + F8E469ED1395812A00DB05C8 /* Images */, + F8E469931395743A00DB05C8 /* Vendor */, + F8E469631395739D00DB05C8 /* Frameworks */, + F8E469611395739C00DB05C8 /* Products */, + ); + indentWidth = 4; + sourceTree = ""; + tabWidth = 4; + usesTabs = 0; + }; + F8E469611395739C00DB05C8 /* Products */ = { + isa = PBXGroup; + children = ( + F8E469601395739C00DB05C8 /* AFNetworking iOS Example.app */, + ); + name = Products; + sourceTree = ""; + }; + F8E469631395739D00DB05C8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 50ABD6EC159FC2CE001BE42C /* MobileCoreServices.framework */, + F8E469E213957DF700DB05C8 /* SystemConfiguration.framework */, + F8E469E013957DF100DB05C8 /* Security.framework */, + F8E469DE13957DD500DB05C8 /* CoreLocation.framework */, + F8E469641395739D00DB05C8 /* UIKit.framework */, + F8E469661395739D00DB05C8 /* Foundation.framework */, + F8E469681395739D00DB05C8 /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F8E4696A1395739D00DB05C8 /* Classes */ = { + isa = PBXGroup; + children = ( + F8129C7315910C37009BFE23 /* AppDelegate.h */, + F8129C7215910C37009BFE23 /* AppDelegate.m */, + F8DA09C91396AB690057D0CC /* Models */, + F8DA09CC1396AB690057D0CC /* Views */, + F8DA09C61396AB690057D0CC /* Controllers */, + F8E4696B1395739D00DB05C8 /* Supporting Files */, + ); + name = Classes; + path = AFNetworkingExample; + sourceTree = ""; + }; + F8E4696B1395739D00DB05C8 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E8C2E7A418970EE00097DCC8 /* root_ca.cer */, + E8C2E7A518970EE00097DCC8 /* digicert_ca_3.cer */, + 2982AD3117107C0000FFF048 /* adn.cer */, + F8DA09E31396AC040057D0CC /* main.m */, + F8129C3815910830009BFE23 /* Prefix.pch */, + F8E4696C1395739D00DB05C8 /* iOS-Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F8E469931395743A00DB05C8 /* Vendor */ = { + isa = PBXGroup; + children = ( + F8FA949B150EFEC100ED4EAD /* AFNetworking */, + F8E02CEA177A8B710087BB23 /* UIKit+AFNetworking */, + ); + name = Vendor; + sourceTree = ""; + }; + F8E469B71395759C00DB05C8 /* Networking Extensions */ = { + isa = PBXGroup; + children = ( + F8FA948F150EF8C100ED4EAD /* AFAppDotNetAPIClient.h */, + F8FA9490150EF8C100ED4EAD /* AFAppDotNetAPIClient.m */, + ); + name = "Networking Extensions"; + sourceTree = ""; + }; + F8E469ED1395812A00DB05C8 /* Images */ = { + isa = PBXGroup; + children = ( + F8F6E8D81463424800AD016F /* Icon.png */, + F8F6E8D91463424800AD016F /* Icon@2x.png */, + F8FA94CC150F094D00ED4EAD /* profile-image-placeholder.png */, + F8FA94CD150F094D00ED4EAD /* profile-image-placeholder@2x.png */, + ); + name = Images; + path = AFNetworkingExample/Images; + sourceTree = ""; + }; + F8FA949B150EFEC100ED4EAD /* AFNetworking */ = { + isa = PBXGroup; + children = ( + F8FA94A8150EFEC100ED4EAD /* AFNetworking.h */, + F8D549A317DBE54700BFF314 /* NSURLConnection */, + F8D549A217DBE53B00BFF314 /* NSURLSession */, + F8D549A117DBE52C00BFF314 /* Serialization */, + F8D549A417DBE54F00BFF314 /* Reachability */, + F8D549A517DBE55400BFF314 /* Security */, + ); + name = AFNetworking; + path = ../AFNetworking; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F8E4695F1395739C00DB05C8 /* AFNetworking iOS Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F8E469811395739D00DB05C8 /* Build configuration list for PBXNativeTarget "AFNetworking iOS Example" */; + buildPhases = ( + F8E4695C1395739C00DB05C8 /* Sources */, + F8E4695D1395739C00DB05C8 /* Frameworks */, + F8E4695E1395739C00DB05C8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "AFNetworking iOS Example"; + productName = AFNetworkingExample; + productReference = F8E469601395739C00DB05C8 /* AFNetworking iOS Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F8E469571395739C00DB05C8 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = Gowalla; + TargetAttributes = { + F8E4695F1395739C00DB05C8 = { + SystemCapabilities = { + com.apple.BackgroundModes = { + enabled = 1; + }; + }; + }; + }; + }; + buildConfigurationList = F8E4695A1395739C00DB05C8 /* Build configuration list for PBXProject "AFNetworking iOS Example" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = F8E469551395739C00DB05C8; + productRefGroup = F8E469611395739C00DB05C8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F8E4695F1395739C00DB05C8 /* AFNetworking iOS Example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F8E4695E1395739C00DB05C8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F8F6E8DC1463424800AD016F /* Icon.png in Resources */, + F8F6E8DD1463424800AD016F /* Icon@2x.png in Resources */, + E8C2E7A718970EE40097DCC8 /* digicert_ca_3.cer in Resources */, + F8FA94D0150F094D00ED4EAD /* profile-image-placeholder.png in Resources */, + F8FA94D1150F094D00ED4EAD /* profile-image-placeholder@2x.png in Resources */, + F8A847C1161F51A300940F39 /* Default-568h@2x.png in Resources */, + F8A847C3161F523E00940F39 /* Default.png in Resources */, + E8C2E7A618970EE40097DCC8 /* root_ca.cer in Resources */, + F8A847C5161F524200940F39 /* Default@2x.png in Resources */, + 2982AD3217107C0000FFF048 /* adn.cer in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F8E4695C1395739C00DB05C8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F86A37E0177397D900407E52 /* AFURLSessionManager.m in Sources */, + F8DA09E41396AC040057D0CC /* main.m in Sources */, + F8664A2018AA99F5007D8554 /* UIRefreshControl+AFNetworking.m in Sources */, + F8B3944D17DBF9B900430F25 /* AFHTTPRequestOperationManager.m in Sources */, + F8CBED2317D595320088ADC0 /* UIAlertView+AFNetworking.m in Sources */, + F8FA9491150EF8C100ED4EAD /* AFAppDotNetAPIClient.m in Sources */, + F8FA9494150EF97E00ED4EAD /* Post.m in Sources */, + F8FA9497150EF98800ED4EAD /* User.m in Sources */, + F8E02CF8177A8B710087BB23 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + F8E02CFB177A8B710087BB23 /* UIProgressView+AFNetworking.m in Sources */, + F8D549A017DB1C9100BFF314 /* AFNetworkReachabilityManager.m in Sources */, + F8E02CF7177A8B710087BB23 /* AFNetworkActivityIndicatorManager.m in Sources */, + 297F56CA17A9B1AB0014D95C /* AFSecurityPolicy.m in Sources */, + F8E02CF9177A8B710087BB23 /* UIButton+AFNetworking.m in Sources */, + F8E02CFA177A8B710087BB23 /* UIImageView+AFNetworking.m in Sources */, + F8FA949A150EF9DA00ED4EAD /* GlobalTimelineViewController.m in Sources */, + F8FA94B1150EFEC100ED4EAD /* AFHTTPSessionManager.m in Sources */, + F8D5499D17DB0EFE00BFF314 /* AFURLRequestSerialization.m in Sources */, + F8D5499A17DB0EF300BFF314 /* AFURLResponseSerialization.m in Sources */, + F8E02CFC177A8B710087BB23 /* UIWebView+AFNetworking.m in Sources */, + F8FA94B2150EFEC100ED4EAD /* AFHTTPRequestOperation.m in Sources */, + F8FA94B8150EFEC100ED4EAD /* AFURLConnectionOperation.m in Sources */, + F8FA94C1150F019100ED4EAD /* PostTableViewCell.m in Sources */, + F8129C7415910C37009BFE23 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F8E4697F1395739D00DB05C8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvmgcc42; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + F8E469801395739D00DB05C8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvmgcc42; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + }; + name = Release; + }; + F8E469821395739D00DB05C8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_ASSIGN_ENUM = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_RECEIVER_WEAK = YES; + CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + GCC_SHORT_ENUMS = YES; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_PEDANTIC = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + INFOPLIST_FILE = "iOS-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + WARNING_CFLAGS = "-Wunreachable-code"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + F8E469831395739D00DB05C8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; + CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_ASSIGN_ENUM = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_OBJC_EXPLICIT_OWNERSHIP_TYPE = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_RECEIVER_WEAK = YES; + CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Prefix.pch; + GCC_SHORT_ENUMS = YES; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_PEDANTIC = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + INFOPLIST_FILE = "iOS-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + VALIDATE_PRODUCT = YES; + WARNING_CFLAGS = "-Wunreachable-code"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F8E4695A1395739C00DB05C8 /* Build configuration list for PBXProject "AFNetworking iOS Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F8E4697F1395739D00DB05C8 /* Debug */, + F8E469801395739D00DB05C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F8E469811395739D00DB05C8 /* Build configuration list for PBXNativeTarget "AFNetworking iOS Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F8E469821395739D00DB05C8 /* Debug */, + F8E469831395739D00DB05C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F8E469571395739C00DB05C8 /* Project object */; +} diff --git a/AFNetworking-master/Example/AppDelegate.h b/AFNetworking-master/Example/AppDelegate.h new file mode 100755 index 0000000..b3c9e36 --- /dev/null +++ b/AFNetworking-master/Example/AppDelegate.h @@ -0,0 +1,44 @@ +// AppDelegate.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED + #import + + @interface AppDelegate : NSObject + + @property (nonatomic, strong) UIWindow *window; + @property (nonatomic, strong) UINavigationController *navigationController; + + @end +#else + #import + + @interface AppDelegate : NSObject + + @property (strong) IBOutlet NSWindow *window; + @property (strong) IBOutlet NSTableView *tableView; + @property (strong) IBOutlet NSArrayController *postsArrayController; + + @end +#endif diff --git a/AFNetworking-master/Example/AppDelegate.m b/AFNetworking-master/Example/AppDelegate.m new file mode 100755 index 0000000..65ea0ad --- /dev/null +++ b/AFNetworking-master/Example/AppDelegate.m @@ -0,0 +1,91 @@ +// AppDelegate.m +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AppDelegate.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED + #import "GlobalTimelineViewController.h" + + #import "AFNetworkActivityIndicatorManager.h" + + @implementation AppDelegate + + - (BOOL)application:(__unused UIApplication *)application + didFinishLaunchingWithOptions:(__unused NSDictionary *)launchOptions + { + NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; + [NSURLCache setSharedURLCache:URLCache]; + + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; + + UITableViewController *viewController = [[GlobalTimelineViewController alloc] initWithStyle:UITableViewStylePlain]; + self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + self.navigationController.navigationBar.tintColor = [UIColor darkGrayColor]; + + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + self.window.backgroundColor = [UIColor whiteColor]; + self.window.rootViewController = self.navigationController; + [self.window makeKeyAndVisible]; + + return YES; + } + + @end +#else + #import "Post.h" + #import "User.h" + + @implementation AppDelegate + + - (void)applicationDidFinishLaunching:(NSNotification *)notification { + NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; + [NSURLCache setSharedURLCache:URLCache]; + + [self.window makeKeyAndOrderFront:self]; + + [Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) { + if (error) { + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = NSLocalizedString(@"Error", nil); + alert.informativeText = error.localizedDescription; + [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]; + [alert runModal]; + } + + self.postsArrayController.content = posts; + }]; + + [[NSNotificationCenter defaultCenter] addObserverForName:kUserProfileImageDidLoadNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + [self.tableView reloadData]; + }]; + } + + - (BOOL)applicationShouldHandleReopen:(NSApplication *)application + hasVisibleWindows:(BOOL)flag + { + [self.window makeKeyAndOrderFront:self]; + + return YES; + } + + @end +#endif diff --git a/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.h b/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.h new file mode 100755 index 0000000..fc80e70 --- /dev/null +++ b/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.h @@ -0,0 +1,30 @@ +// AFAppDotNetAPIClient.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import "AFHTTPSessionManager.h" + +@interface AFAppDotNetAPIClient : AFHTTPSessionManager + ++ (instancetype)sharedClient; + +@end diff --git a/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.m b/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.m new file mode 100755 index 0000000..2908ff7 --- /dev/null +++ b/AFNetworking-master/Example/Classes/AFAppDotNetAPIClient.m @@ -0,0 +1,40 @@ +// AFAppDotNetAPIClient.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFAppDotNetAPIClient.h" + +static NSString * const AFAppDotNetAPIBaseURLString = @"https://api.app.net/"; + +@implementation AFAppDotNetAPIClient + ++ (instancetype)sharedClient { + static AFAppDotNetAPIClient *_sharedClient = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]]; + _sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + }); + + return _sharedClient; +} + +@end diff --git a/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.h b/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.h new file mode 100755 index 0000000..009cb54 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.h @@ -0,0 +1,27 @@ +// GlobalTimelineViewController.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@interface GlobalTimelineViewController : UITableViewController + +@end diff --git a/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.m b/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.m new file mode 100755 index 0000000..3529ff4 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Controllers/GlobalTimelineViewController.m @@ -0,0 +1,105 @@ +// GlobalTimelineViewController.m +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "GlobalTimelineViewController.h" + +#import "Post.h" + +#import "PostTableViewCell.h" + +#import "UIRefreshControl+AFNetworking.h" +#import "UIAlertView+AFNetworking.h" + +@interface GlobalTimelineViewController () +@property (readwrite, nonatomic, strong) NSArray *posts; +@end + +@implementation GlobalTimelineViewController + +- (void)reload:(__unused id)sender { + self.navigationItem.rightBarButtonItem.enabled = NO; + + NSURLSessionTask *task = [Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) { + if (!error) { + self.posts = posts; + [self.tableView reloadData]; + } + }]; + + [UIAlertView showAlertViewForTaskWithErrorOnCompletion:task delegate:nil]; + [self.refreshControl setRefreshingWithStateOfTask:task]; +} + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = NSLocalizedString(@"AFNetworking", nil); + + self.refreshControl = [[UIRefreshControl alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.frame.size.width, 100.0f)]; + [self.refreshControl addTarget:self action:@selector(reload:) forControlEvents:UIControlEventValueChanged]; + [self.tableView.tableHeaderView addSubview:self.refreshControl]; + + self.tableView.rowHeight = 70.0f; + + [self reload:nil]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(__unused UITableView *)tableView + numberOfRowsInSection:(__unused NSInteger)section +{ + return (NSInteger)[self.posts count]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + PostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (!cell) { + cell = [[PostTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; + } + + cell.post = [self.posts objectAtIndex:(NSUInteger)indexPath.row]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (CGFloat)tableView:(__unused UITableView *)tableView +heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [PostTableViewCell heightForCellWithPost:[self.posts objectAtIndex:(NSUInteger)indexPath.row]]; +} + +- (void)tableView:(UITableView *)tableView +didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; +} + +@end diff --git a/AFNetworking-master/Example/Classes/Models/Post.h b/AFNetworking-master/Example/Classes/Models/Post.h new file mode 100755 index 0000000..d390e17 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Models/Post.h @@ -0,0 +1,38 @@ +// Post.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@class User; + +@interface Post : NSObject + +@property (nonatomic, assign) NSUInteger postID; +@property (nonatomic, strong) NSString *text; + +@property (nonatomic, strong) User *user; + +- (instancetype)initWithAttributes:(NSDictionary *)attributes; + ++ (NSURLSessionDataTask *)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block; + +@end diff --git a/AFNetworking-master/Example/Classes/Models/Post.m b/AFNetworking-master/Example/Classes/Models/Post.m new file mode 100755 index 0000000..8d91095 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Models/Post.m @@ -0,0 +1,65 @@ +// Post.m +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "Post.h" +#import "User.h" + +#import "AFAppDotNetAPIClient.h" + +@implementation Post + +- (instancetype)initWithAttributes:(NSDictionary *)attributes { + self = [super init]; + if (!self) { + return nil; + } + + self.postID = (NSUInteger)[[attributes valueForKeyPath:@"id"] integerValue]; + self.text = [attributes valueForKeyPath:@"text"]; + + self.user = [[User alloc] initWithAttributes:[attributes valueForKeyPath:@"user"]]; + + return self; +} + +#pragma mark - + ++ (NSURLSessionDataTask *)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block { + return [[AFAppDotNetAPIClient sharedClient] GET:@"stream/0/posts/stream/global" parameters:nil success:^(NSURLSessionDataTask * __unused task, id JSON) { + NSArray *postsFromResponse = [JSON valueForKeyPath:@"data"]; + NSMutableArray *mutablePosts = [NSMutableArray arrayWithCapacity:[postsFromResponse count]]; + for (NSDictionary *attributes in postsFromResponse) { + Post *post = [[Post alloc] initWithAttributes:attributes]; + [mutablePosts addObject:post]; + } + + if (block) { + block([NSArray arrayWithArray:mutablePosts], nil); + } + } failure:^(NSURLSessionDataTask *__unused task, NSError *error) { + if (block) { + block([NSArray array], error); + } + }]; +} + +@end diff --git a/AFNetworking-master/Example/Classes/Models/User.h b/AFNetworking-master/Example/Classes/Models/User.h new file mode 100755 index 0000000..aeb7641 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Models/User.h @@ -0,0 +1,39 @@ +// User.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +extern NSString * const kUserProfileImageDidLoadNotification; + +@interface User : NSObject + +@property (readonly, nonatomic, assign) NSUInteger userID; +@property (readonly, nonatomic, copy) NSString *username; +@property (readonly, nonatomic, unsafe_unretained) NSURL *avatarImageURL; + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED +@property (nonatomic, strong) NSImage *profileImage; +#endif + +- (instancetype)initWithAttributes:(NSDictionary *)attributes; + +@end diff --git a/AFNetworking-master/Example/Classes/Models/User.m b/AFNetworking-master/Example/Classes/Models/User.m new file mode 100755 index 0000000..882535b --- /dev/null +++ b/AFNetworking-master/Example/Classes/Models/User.m @@ -0,0 +1,100 @@ +// User.m +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "User.h" +#import "AFHTTPRequestOperation.h" + +NSString * const kUserProfileImageDidLoadNotification = @"com.alamofire.user.profile-image.loaded"; + +@interface User () +@property (readwrite, nonatomic, assign) NSUInteger userID; +@property (readwrite, nonatomic, copy) NSString *username; +@property (readwrite, nonatomic, copy) NSString *avatarImageURLString; + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED +@property (readwrite, nonatomic, strong) AFHTTPRequestOperation *avatarImageRequestOperation; +#endif +@end + +@implementation User + +- (instancetype)initWithAttributes:(NSDictionary *)attributes { + self = [super init]; + if (!self) { + return nil; + } + + self.userID = (NSUInteger)[[attributes valueForKeyPath:@"id"] integerValue]; + self.username = [attributes valueForKeyPath:@"username"]; + self.avatarImageURLString = [attributes valueForKeyPath:@"avatar_image.url"]; + + return self; +} + +- (NSURL *)avatarImageURL { + return [NSURL URLWithString:self.avatarImageURLString]; +} + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + ++ (NSOperationQueue *)sharedProfileImageRequestOperationQueue { + static NSOperationQueue *_sharedProfileImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedProfileImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + [_sharedProfileImageRequestOperationQueue setMaxConcurrentOperationCount:8]; + }); + + return _sharedProfileImageRequestOperationQueue; +} + +- (NSImage *)profileImage { + if (!_profileImage && !_avatarImageRequestOperation) { + NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:self.avatarImageURL]; + [mutableRequest setValue:@"image/*" forHTTPHeaderField:@"Accept"]; + AFHTTPRequestOperation *imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:mutableRequest]; + imageRequestOperation.responseSerializer = [AFImageResponseSerializer serializer]; + [imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, NSImage *responseImage) { + self.profileImage = responseImage; + + _avatarImageRequestOperation = nil; + + [[NSNotificationCenter defaultCenter] postNotificationName:kUserProfileImageDidLoadNotification object:self userInfo:nil]; + } failure:nil]; + + [imageRequestOperation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) { + return [[NSCachedURLResponse alloc] initWithResponse:cachedResponse.response data:cachedResponse.data userInfo:cachedResponse.userInfo storagePolicy:NSURLCacheStorageAllowed]; + }]; + + _avatarImageRequestOperation = imageRequestOperation; + + [[[self class] sharedProfileImageRequestOperationQueue] addOperation:_avatarImageRequestOperation]; + } + + return _profileImage; +} + +#endif + +@end diff --git a/AFNetworking-master/Example/Classes/Views/PostTableViewCell.h b/AFNetworking-master/Example/Classes/Views/PostTableViewCell.h new file mode 100755 index 0000000..8336b24 --- /dev/null +++ b/AFNetworking-master/Example/Classes/Views/PostTableViewCell.h @@ -0,0 +1,33 @@ +// TweetTableViewCell.h +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@class Post; + +@interface PostTableViewCell : UITableViewCell + +@property (nonatomic, strong) Post *post; + ++ (CGFloat)heightForCellWithPost:(Post *)post; + +@end diff --git a/AFNetworking-master/Example/Classes/Views/PostTableViewCell.m b/AFNetworking-master/Example/Classes/Views/PostTableViewCell.m new file mode 100755 index 0000000..14a31ad --- /dev/null +++ b/AFNetworking-master/Example/Classes/Views/PostTableViewCell.m @@ -0,0 +1,82 @@ +// TweetTableViewCell.m +// +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "PostTableViewCell.h" + +#import "Post.h" +#import "User.h" + +#import "UIImageView+AFNetworking.h" + +@implementation PostTableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style + reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (!self) { + return nil; + } + + self.textLabel.adjustsFontSizeToFitWidth = YES; + self.textLabel.textColor = [UIColor darkGrayColor]; + self.detailTextLabel.font = [UIFont systemFontOfSize:12.0f]; + self.detailTextLabel.numberOfLines = 0; + self.selectionStyle = UITableViewCellSelectionStyleGray; + + return self; +} + +- (void)setPost:(Post *)post { + _post = post; + + self.textLabel.text = _post.user.username; + self.detailTextLabel.text = _post.text; + [self.imageView setImageWithURL:_post.user.avatarImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]]; + + [self setNeedsLayout]; +} + ++ (CGFloat)heightForCellWithPost:(Post *)post { + return (CGFloat)fmaxf(70.0f, (float)[self detailTextHeight:post.text] + 45.0f); +} + ++ (CGFloat)detailTextHeight:(NSString *)text { + CGRect rectToFit = [text boundingRectWithSize:CGSizeMake(240.0f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12.0f]} context:nil]; + return rectToFit.size.height; +} + +#pragma mark - UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + + self.imageView.frame = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); + self.textLabel.frame = CGRectMake(70.0f, 6.0f, 240.0f, 20.0f); + + CGRect detailTextLabelFrame = CGRectOffset(self.textLabel.frame, 0.0f, 25.0f); + CGFloat calculatedHeight = [[self class] detailTextHeight:self.post.text]; + detailTextLabelFrame.size.height = calculatedHeight; + self.detailTextLabel.frame = detailTextLabelFrame; +} + +@end diff --git a/AFNetworking-master/Example/Default-568h@2x.png b/AFNetworking-master/Example/Default-568h@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..0891b7aabfcf3422423b109c8beed2bab838c607 GIT binary patch literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Example/Default.png b/AFNetworking-master/Example/Default.png new file mode 100755 index 0000000000000000000000000000000000000000..44cc3a31c77f95b279d444d93c92a33d2a1e60db GIT binary patch literal 942 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 FV1n0qUt9nH literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Example/Icon@2x.png b/AFNetworking-master/Example/Icon@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..7fcc2264f7d4864cd2d5838d1966981fb9937b54 GIT binary patch literal 10055 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 literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Example/Images/profile-image-placeholder.png b/AFNetworking-master/Example/Images/profile-image-placeholder.png new file mode 100755 index 0000000000000000000000000000000000000000..4503b5b9062bfcedf9cb1b807f9fa7c4069e81f3 GIT binary patch literal 1098 zcmV-Q1hxB#P)k%_2n30Cfum0GYJd9k#rXVYvNhS3MKtnt zulfFEx7)}m3Q<)jqM{C}og#mK(tX`)Ze7rA)Cx>*`)xuXA_$wsmL!0;haCVP{vL0k zS#7mEdAyUq>31jsSq)XKwt&1j>>TgpzP@Jlut;=reRtRm4C_E~Ktx2}9d$do)&;AH z1)jcWHFK>@Gb5PqS7!n!fOejp_S-}~t{PZIzG!FPbqg~BV5ESoxhI@aRRdn`Hv8?o zmi=pB3GiyKp)z~$kT}5cfs`UndEdx(BZ zEbzFKhv_9`eK=P5oa)JL!xEFFW93eIE$3}B!F{D%JOg;t&I^~?z>?aj5eJ1fGpW*q zQ5N>YxC=XsMrh1x#%88_jqLL%X+}y^i~9|SsCG7w70vEb(aZ$wwX#HWC8?#5okD0v z%v4!Io(mQ?Ff)rU0N}~phPp3^5s*eK3u9(gy(;4)YWlI~04i8Gj3$p#B^GfG zg86U@+jvM;5b=1#a_`{G1CRSYalJ)iHrvLQuiz@y7!J!74|PmSmxkqMH{2{ntlvuc z;{8y^FwK7fECD9O)XYWhxi8{&x_XkF8cSnJr%zBzPLCrj+VEBF>66%P;)|l*T_smMB#XEC8b^&TgUWS)-W0AufImX8-Nlk0$A<>bzB} z;L|NS8IM|GTxb(wU8+z@2c8e@&rzzYX1Quy3jp}_1{dQ+j##QqPr|=$?ZZ|2B7PRN zzd?}rOCF97; z)zIU*42lqdYUVPRiOTk0K%elDQdC7%k>}grtKMBUg_M$(*yfk3w=x z$E4r-FD`7tukD>1pXGmu9E=O@o&vd%(eK%2E`(w!&tyEd zFaCE9ncnCnWFH1V>Bgl%a2C55{0vE+oQrH^XGf3_Dx!$OLF4Us&m5Zv#fAB}!y$P| zMMW|if)Kl0$8T6vZ!|_An+S~dor{JcFY8*+X%BZpi_hLcLwSUxZ;y)T4)4wDU@*m) z0_Bww)nLbFLGEv!9yvfdErc~#bqt~;0zhzKHZ4f9W}B_=X>o>|Wz$ZqduIoTGe)Q; z27p8;nsrC%9qn)R^5D^N=Vfoe-%G87EW2ZK(kG8^#J$KL{vFg5j0Boj$6)k+2jU5Q zse4mUD5GGL;6MRmn1O1til;|99ao$0{msz)V0X=$zBoB_ubf0oR!_)qaabdu)Za<` z0VNU*_m3yo)hmdSmA%E<`dp z)4T)L>#K0$xK4ZbEO1`6OZ!m+jpyd{M~ORxm=Jtiv>v=Ru{zNFqc~)BduVk4sFbIf z3KDO*TNVNjl9Dc4dzjmU(b}}6oM0Vt-7OBZt&@PJN{gRsUoV!kka;|v&ojFVHfr4P zHDO3Z=AFpsYt3fK%7&@bmF?Qj8ctGPkAbwM-Q<%4h73Wt6Qd>NTbcT+bjIG!DGF|i zl1!)>u}^QJZy$sRYJJ>x!cR@YPZ*#(86=SWczw3QqYW`YKMdY&H0FNc-epQn4q#JE zEXVnvs){4Nwb+DNeWQJt;z}(@y}3I*1R`^x7QCJ{Aa}maKc}}>_F;T`F^XWm^$WMXVcUy3J z82~yn#0WuD_{886JMzL?aXYq{Q%v1EeR=Lm$b8Ar(-*egA5t?cp+m1Qrg#(BE#{Rw|}f$Rqnf_Ye5^5cdmZhs4C9M z5fW@ZYSqORKK~O*j#eKwlcftOt12m}(JV`0ntnPtb#R|f849&k?S8wmDMw0_U*iB}*P7Y%TTmS&z+y2g~+!Q zAv)HeSaFvOz(7H|`sqKIavssz+0J3J@NFx zC4qGt9u*Y&I8$Gtl#4#=Xrwq_882&`Iw!SYSneqyxpt9VEunmrs^6}qIdW66nr%%a zE&>(-Mxow4Dp;JjLfw+i`NGVlm0veS>%bE$mfMbpwtXNDwOR^b&1wM+`{$K)Z$V|N zI^>yxYq2X;FmwYC(Q&_j>NxLfu7P;wP4}1crgT@YuezRiQt7>HSbz`3%k}ki>4!_9 zO4VfhEnRWW?{EhP%2nH43^hRD^0(oy@kH>QCkFmu+s&4=;aVPK&t_wt;1rON5};{6 zm~8lSq4xg8`y6LUAV1eo*Ps*9QYzbZwRS&~RZ0K%1L$u|vG9APk~2N-u14Losf!|N z)N|MpmR%9iNpksn1;3~C56@TU<%2aN{Vd6xu^ft`t>rI=51wAu2=>WKXO74u$R z9-x^^@nJLX2#h&ZgqW49E&4PT+=*#80T<^y8=+aQv9_k<)%RfsB$vC_qba;4pT5T$ zOdrG;+-z>=oZE-CO9dk3thkg?xcaSaY8osY5P4e78>@>JvX5P}gS6?#3Qq1zG1r!o zk`){Gf`fMtC**c;6*NDjvep!z7?*0xK8t|TV5re=Ne}A3i8?MDV59mc)pYzaomwiC z0(3Lm#-y=aVdJ}X2|;7T#p``ODJQmlc?LZgfLFwtOZgtD$lH+jhhCLOTNJ5K(+Lbe zX=9gC?By~0&e~wiJ~C;z@BULiVr-LovEgxX160kujK0vZ;%GMh4Uo7YkomKIZpz1D z34a1}LgZgg-PdyCn0wT#PmNsioz{bHV!m%NwcWWP4*3fkzpaWSf0?MehIo`MUhhQl zzRSf%HCrwlx^N86MizFzGN40~4fX^L(34BKApFSX`bW?AK9nnZF$G~PZO3E#xaYtp=bS{JMh`BM*6Y9+=enurtKw0&Cd&VDb^F4_{cD72a zcFo>_+`n#(1U$X(=8MZZpggI+0*VL%ngOGBGGiHp%X_ho0p$a6?ahKCJSu#;s@W3N zr~J04{b8o^=cwwhM3b%>>BrsaMA2epX5f6cOIb%t-pa~*JO3FuY4W(u*4t#s{qT$h z{_3>c9hHtKk!}&>rB?9n9@li5%kr!KoK-Vp5A6LfmC-d>TqmDhRQa2K5GDu@S z{A{z(xKOn*)2ju%@S6|XO^{>XgmQaM zJKbw78C6D_Qo)V!SghlNM*0t@_4${AC9jD+WWV&)z?6AOBRNJ|jyD%E#TTkVdEn*u z=2o>_J+lf;YQAB&dAxc-0eLmH;B!kwx6JSmmKT=7{hW3vjlC&vQuqEv@UWnED|kkh zbrtg>6v%F;%2)b<2^u(vkIXGH_No>AQhMT%=yIhPl6R1B?_gRrtPAoW8V_5k(r3lS ziiz6TzGeh#uh(mAm}Q*{Gf*q<_njfm*zed2Ll7v^<2(4j()OFiD^ewJ60WkDoa}$^ zGh_+LHXtDd-V7;a``B*huAZ043yf9%KZn)NLp))Pj_1&|>SpQoX_DD>zF6AF)1g3i z355Vsh49-1m?#k(t{?qOlqjU&Tk?vJvz1~r$#CoMqF)^QCBg=Q2`c~+-vM4N|Nh^s zBhc9f+Q9zinB{~lEU M{FW88&cq|(9~Fd4w*UYD literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Example/Mac-Info.plist b/AFNetworking-master/Example/Mac-Info.plist new file mode 100755 index 0000000..fc1c1f6 --- /dev/null +++ b/AFNetworking-master/Example/Mac-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.alamofire.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2012年 Mattt Thompson. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/AFNetworking-master/Example/MainMenu.xib b/AFNetworking-master/Example/MainMenu.xib new file mode 100755 index 0000000..bc91a7d --- /dev/null +++ b/AFNetworking-master/Example/MainMenu.xib @@ -0,0 +1,1894 @@ + + + + 101000 + 14A389 + 6250 + 1343.14 + 755.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + IBNSLayoutConstraint + NSArrayController + NSCustomObject + NSImageCell + NSImageView + NSMenu + NSMenuItem + NSScrollView + NSScroller + NSTableCellView + NSTableColumn + NSTableView + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + AFNetworking OS X Example + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + + AFNetworking OS X Example + + + + About AFNetworking OS X Example + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide AFNetworking OS X Example + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit AFNetworking OS X Example + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 2147483647 + + + submenuAction: + + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 2147483647 + + + submenuAction: + + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Page Setup… + P + 1048576 + 2147483647 + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + + Help + + + + AFNetworking OS X Example Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 4111 + 2 + {{60, 295}, {331, 500}} + 1954022400 + AFNetworking OS X Example + NSWindow + + + {375, 1280} + {375, 200} + + + 256 + + + + 274 + + + + 2304 + + + + 256 + + + + 274 + + + + 266 + {{85, 65}, {235, 17}} + + + {250, 750} + YES + + 67108928 + 272631808 + Username + + YES + 14 + 2072 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + 1 + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{14, 21}, {56, 56}} + + + _NS:9 + YES + + 134217728 + 33554432 + _NS:9 + 0 + 0 + 1 + NO + + NO + YES + + + + 268 + {{85, 3}, {234, 56}} + + + _NS:9 + {250, 750} + YES + + 67108864 + 272629760 + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad mi. + + YES + 11 + 3100 + + _NS:9 + + + + + NO + 1 + + + {{5, 5}, {321, 85}} + + + + + {331, 498} + + + _NS:1197 + YES + NO + YES + + + -2147483392 + {{224, 0}, {16, 17}} + _NS:1202 + + + + 321 + 70 + 10000 + + 75497536 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + + + + 134217728 + 33554432 + _NS:4045 + 1 + 0 + 0 + NO + + 3 + YES + YES + + + + 10 + 10 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 85 + 381714432 + + + 1 + 15 + 0 + YES + 0 + 1 + + + {{1, 1}, {331, 498}} + + + _NS:1195 + + + 6 + System + controlBackgroundColor + + + 4 + YES + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _NS:1214 + NO + _doScroller: + + + _doScroller: + 0.99815157116451014 + + + + -2147483392 + {{1, 484}, {373, 15}} + + _NS:1216 + NO + _doScroller: + + 1 + + _doScroller: + 0.99732620320855614 + + + {{-1, 0}, {333, 500}} + + + _NS:1193 + 133682 + + + + QSAAAEEgAABCvgAAQr4AAA + 0.25 + 4 + 1 + + + {331, 500} + + + {{0, 0}, {1440, 878}} + {375, 222} + {375, 1302} + YES + + + AppDelegate + + + NSFontManager + + + Spot + + YES + YES + YES + YES + YES + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 615 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + performZoom: + + + + 240 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + showHelp: + + + + 493 + + + + print: + + + + 632 + + + + performClose: + + + + 634 + + + + saveDocumentAs: + + + + 637 + + + + runPageLayout: + + + + 638 + + + + saveDocument: + + + + 639 + + + + revertDocumentToSaved: + + + + 640 + + + + newDocument: + + + + 635 + + + + clearRecentDocuments: + + + + 636 + + + + openDocument: + + + + 633 + + + + window + + + + 532 + + + + tableView + + + + 848 + + + + postsArrayController + + + + 849 + + + + value: arrangedObjects + + + + + + value: arrangedObjects + value + arrangedObjects + 2 + + + 598 + + + + textField + + + + 580 + + + + value: objectValue.user.username + + + + + + value: objectValue.user.username + value + objectValue.user.username + 2 + + + 604 + + + + value: objectValue.user.profileImage + + + + + + value: objectValue.user.profileImage + value + objectValue.user.profileImage + 2 + + + 829 + + + + value: objectValue.text + + + + + + value: objectValue.text + value + objectValue.text + 2 + + + 605 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 57 + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 371 + + + + + + + + 372 + + + + + + 10 + 0 + + 10 + 1 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + NO + + + + 6 + 0 + + 6 + 1 + 1 + + -1 + + 1000 + + 0 + 29 + 3 + NO + + + + 5 + 0 + + 5 + 1 + 1 + + -1 + + 1000 + + 0 + 29 + 3 + NO + + + + 3 + 0 + + 3 + 1 + 1 + + 0.0 + + 1000 + + 3 + 9 + 3 + NO + + + + + + 420 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 555 + + + Tweets Array Controller + + + 537 + + + + + + + + + + 541 + + + + + + + + 542 + + + + + + + + + 546 + + + + + 540 + + + + + 538 + + + + + 577 + + + + + + + 5 + 0 + + 5 + 1 + 1 + + 87 + + 1000 + + 9 + 40 + 3 + NO + + + + 3 + 0 + + 3 + 1 + 1 + + 26 + + 1000 + + 9 + 40 + 3 + NO + + + + 5 + 0 + + 5 + 1 + 1 + + 87 + + 1000 + + 9 + 40 + 3 + NO + + + + 9 + 0 + + 9 + 1 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + NO + + + + 3 + 0 + + 3 + 1 + 1 + + 3 + + 1000 + + 0 + 29 + 3 + NO + + + + 5 + 0 + + 5 + 1 + 1 + + 0.0 + + 1000 + + 9 + 40 + 2 + NO + + + + 6 + 0 + + 6 + 1 + 1 + + 3 + + 1000 + + 9 + 40 + 3 + NO + + + + 3 + 0 + + 3 + 1 + 1 + + 11 + + 1000 + + 3 + 9 + 3 + NO + + + + 5 + 0 + + 5 + 1 + 1 + + 17 + + 1000 + + 3 + 9 + 3 + NO + + + + + + + 578 + + + + + + 8 + 0 + + 0 + 1 + 1 + + 17 + + 1000 + + 3 + 9 + 1 + NO + + + + + + 579 + + + + + 594 + + + + + + 8 + 0 + + 0 + 1 + 1 + + 50 + + 1000 + + 9 + 40 + 1 + NO + + + + 7 + 0 + + 0 + 1 + 1 + + 50 + + 1000 + + 3 + 9 + 1 + NO + + + + + + 595 + + + + + 596 + + + + + + 8 + 1 + + 0 + 1 + 1 + + 34 + + 1000 + + 9 + 40 + 1 + NO + + + + 8 + 0 + + 0 + 1 + 1 + + 56 + + 1000 + + 3 + 9 + 1 + NO + + + + 7 + 0 + + 0 + 1 + 1 + + 230 + + 652 + + 9 + 40 + 1 + NO + + + + + + 597 + + + + + 617 + + + + + + + + 618 + + + + + + + + + + + + + + + + + + 622 + + + + + 623 + + + + + 624 + + + + + 625 + + + + + 626 + + + + + 627 + + + + + 628 + + + + + 629 + + + + + 619 + + + + + 621 + + + + + + + + 630 + + + + + + + + 631 + + + + + 620 + + + + + 694 + + + + + 702 + + + + + 714 + + + + + 732 + + + + + 813 + + + + + 814 + + + + + 816 + + + + + 824 + + + + + 836 + + + + + 837 + + + + + 838 + + + + + 839 + + + + + 840 + + + + + 841 + + + + + 842 + + + + + 843 + + + + + 844 + + + + + 845 + + + + + 846 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 849 + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + + YES + + diff --git a/AFNetworking-master/Example/Prefix.pch b/AFNetworking-master/Example/Prefix.pch new file mode 100755 index 0000000..241af5d --- /dev/null +++ b/AFNetworking-master/Example/Prefix.pch @@ -0,0 +1,21 @@ +#import + +#if __IPHONE_OS_VERSION_MIN_REQUIRED + #ifndef __IPHONE_6_0 + #warning "This project uses features only available in iPhone SDK 6.0 and later." + #endif + + #ifdef __OBJC__ + #import + #import + #import + #import + #endif +#else + #ifdef __OBJC__ + #import + #import + #import + #import + #endif +#endif diff --git a/AFNetworking-master/Example/adn.cer b/AFNetworking-master/Example/adn.cer new file mode 100755 index 0000000000000000000000000000000000000000..5cbf610fe652c33dab0c2f549e601ea2beb2133e GIT binary patch literal 1321 zcmXqLVpTP0V&PrD%*4pVB*5L(@Y3#O{b8vMhc`%ceT_8WW#iOp^Jx3d%gD&e%3zRY z$Zf#M#vIDRCd?EXY$$3V4B~JJ^SETDXF8`Al_+@TB^yc_h=YW=g$2sX%k@%#QprFm zz2y8{LsbK1kQB493|xmtW_pH#V{vh5QDR<<3ziM!u8p+Ps?OPR7gikGq)G; zu1Hh4nD@AP(YYhJv%7-2_vf%4$Yg9iu|>8!dzn<;s*Cf^Hb#clEK6`@W@tI)bo`mv{s z@V@J9MiGG(Wmz#FrGKW~%VEjeP$jB+xU%kQn(=&%S*Poa1>(;qMQ)z2`gY2%2W+|R ztao^L92DzusX*q+g6bnoa6>Bm;VSNHF28t z1u!`@)+smLxi{yZyT z{ubz;_molL%Du{&9?jpuF(AvwBE}-}?$4=%MRspl&2!f53%B@}Cs3s243QRO0mfhx zA`Y6^VUfWHGM=B2@jnX-GZX6qh;mhsayAZaHef(23?dA)7HBL` zYg5T6DJihh*H13WF-A$A`pJpLy6Hw1dO#UWwI;aLI)SWEV6ir^G%#o5Olb39Z2OzT z$Y`KtpaF9T6Qh_6$lhY0#pu~W-#H-IpcJWYWvnUH{=|*R>~$7rQ>n*uU3uy=Ci?faV9? z8{daWojCmG-d9!bCtsRY-{sh_WxG$+H&Z1GTe0o!mM(|)C^uZsmr(D0A#M|Ed{+Ml LSE!%Gvt}Lu*zU_* literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Example/digicert_ca_3.cer b/AFNetworking-master/Example/digicert_ca_3.cer new file mode 100755 index 0000000000000000000000000000000000000000..683d5ff30ac23b7f8ef3ceacf01f82f08c278102 GIT binary patch literal 1628 zcmbtUdr*{B6u)=B-DLrRg%$9DumUnXl)VdxMv5$pK%&MY5H%LJj|D#6SG!9L$T+z= zOF4kSG%3W;PD+v^HX@>wfPzM*(rZi0d_)g5Lujl-@zJ>=j@I}`(>HS;=XZYR+~0kC zhggNV#41RzGd#@WiCywNmock-Ykj{Qb}&_oo+WNV=Wtu9?WP;X0s$ggxhruNGTD5g zgqNKq_a+i*xJV`?aYdX`W3ot})3fra#FxUZ5^-s1X=DMoSa3zM2Aw>Dgi#kG349ch z$`ut$6=rjZNv&r!(#1K_OoPE9RVs+TuN#?9Vn~!ciomzZ*DWdv%xG$WNech3npq@h zT#et;)F>5mqKOp;K7J5bfEX+GK!CgOtQeynwM&>dKy@!>UWRDYe=KlF-R}WYNWLlZ7T1^83TfLdxsEuIbY~Z&$S* zURc|^a=j{6dnD^KB#Md`7vzd1T>qr&jfolPmLTbR@IZOMP?cwwSIZ6WKm5w&9G<@G zm%Jkl+6~T4mot-=h~t8Odb@-9prx^W^*fHV*1D>J1D@f#=S`_@?>%((MPb$G{h+S7 zDn~{9hE49ZZwa>dwFUh6iRRk->+|fhPu*GYt#0Vl?KEZ83CE#kwO?C8N2u4u&e8mP zU$vbWUfAxRR^hj_KDKG$wcmCXt7cp*(yPXJ3`Tf|m3Nz1d4CaiIMNv&7~kjf;ZfP( zls=}2lyAjdV01z|Aaq@0OU1UkTFf9G06R&XP!u7AH|E5{K9R*1i!n|n`{(PCna$cc ztkFEjq%j)IoW)=&1F8<<3m!$&Y&rf`oQV`jkIIk~l^`?Hz-T~)&|6S3;sB8%C7>p- zIlwu@A~nn@j|HY47}R5dXo^z48ayn_jew|uLFbQWrB)Ke6hWKFO;<@rvIl+EgB*HP z03%gF`I*pbK_v(Iioi~X%v2NAtpLOXehtz=(*r6+r4Q7z&`TkX0}s_WK3Aicz@q4Q zJk?0oq8aI0bPc*U6YPNYeMcLh>!0zl6cX3l+c?M5g`mbj7ZGH z$z#k9B_Sku!Y0@@<>5UVShMkoGC($NrKtk=8!O4i%_PAdZ(m@Gd&p)@+UO_PvWcIQ zR*FZ3VsQ>F6G}xS@c*45=D%hLpn`(3U+J{nI_^5vjq`-WCkU; z^L_Y}(|rYoYm%I?#lf35p?u^-WH>THC$VJA%d7VdBw{-1r zMPt*v?=r2qYmfH_*Qcf=%l+$y+w+&l^uN&~KRUW^v+eUny!+yo9N|FRRrkHyEO}>M zZb-D`U#M1AT)3J&#G#XdOXX^H^cPc?-4b25KXZK6+=CIvJlf9x-h9wK_*h72by?}3 zvXK=ZRya9+xN~|HS+T(;PB||RICJOS-X2ns7rgt*t-bkcExiNl_9vg6*&XJnQF(up rxa4w_VduVe8Jlvu7wP)PzGG&dT + + + 1070 + 11C42 + 1938 + 1138.17 + 567.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1938 + + + NSWindowTemplate + NSView + NSMenu + NSMenuItem + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + + + AFNetworking-Mac-Example + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + AFNetworking-Mac-Example + + + + About AFNetworking-Mac-Example + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide AFNetworking-Mac-Example + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit AFNetworking-Mac-Example + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + + + Font + + 2147483647 + + + submenuAction: + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + + + AFNetworking-Mac-Example Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 15 + 2 + {{335, 390}, {480, 360}} + 1954021376 + AFNetworking-Mac-Example + NSWindow + + + + + 256 + {480, 360} + + {{0, 0}, {1920, 1178}} + {10000000000000, 10000000000000} + YES + + + AppDelegate + + + NSFontManager + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 495 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + window + + + + 532 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + + + + + + 372 + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 494 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 535 + + + + + ABCardController + NSObject + + id + id + id + id + id + id + id + + + + addCardViewField: + id + + + copy: + id + + + cut: + id + + + doDelete: + id + + + find: + id + + + paste: + id + + + saveChanges: + id + + + + ABCardView + NSButton + NSManagedObjectContext + NSSearchField + NSTextField + NSWindow + + + + mCardView + ABCardView + + + mEditButton + NSButton + + + mManagedObjectContext + NSManagedObjectContext + + + mSearchField + NSSearchField + + + mStatusTextField + NSTextField + + + mWindow + NSWindow + + + + IBProjectSource + ./Classes/ABCardController.h + + + + ABCardView + NSView + + id + id + + + + commitAndSave: + id + + + statusImageClicked: + id + + + + NSImageView + NSView + ABNameFrameView + NSView + NSImage + ABImageView + + + + mBuddyStatusImage + NSImageView + + + mHeaderView + NSView + + + mNameView + ABNameFrameView + + + mNextKeyView + NSView + + + mUserImage + NSImage + + + mUserImageView + ABImageView + + + + IBProjectSource + ./Classes/ABCardView.h + + + + ABImageView + NSImageView + + id + id + id + id + + + + copy: + id + + + cut: + id + + + delete: + id + + + paste: + id + + + + IBProjectSource + ./Classes/ABImageView.h + + + + DVTAutoLayoutView + NSView + + IBProjectSource + ./Classes/DVTAutoLayoutView.h + + + + DVTBorderedView + DVTAutoLayoutView + + contentView + NSView + + + contentView + + contentView + NSView + + + + IBProjectSource + ./Classes/DVTBorderedView.h + + + + DVTDelayedMenuButton + NSButton + + IBProjectSource + ./Classes/DVTDelayedMenuButton.h + + + + DVTGradientImageButton + NSButton + + IBProjectSource + ./Classes/DVTGradientImageButton.h + + + + DVTImageAndTextCell + NSTextFieldCell + + IBProjectSource + ./Classes/DVTImageAndTextCell.h + + + + DVTImageAndTextColumn + NSTableColumn + + IBProjectSource + ./Classes/DVTImageAndTextColumn.h + + + + DVTOutlineView + NSOutlineView + + IBProjectSource + ./Classes/DVTOutlineView.h + + + + DVTSplitView + NSSplitView + + IBProjectSource + ./Classes/DVTSplitView.h + + + + DVTStackView + DVTAutoLayoutView + + IBProjectSource + ./Classes/DVTStackView.h + + + + DVTViewController + NSViewController + + IBProjectSource + ./Classes/DVTViewController.h + + + + HFController + NSObject + + selectAll: + id + + + selectAll: + + selectAll: + id + + + + IBProjectSource + ./Classes/HFController.h + + + + HFRepresenterTextView + NSView + + selectAll: + id + + + selectAll: + + selectAll: + id + + + + IBProjectSource + ./Classes/HFRepresenterTextView.h + + + + IBEditor + NSObject + + id + id + id + + + + changeFont: + id + + + selectAll: + id + + + sizeSelectionToFit: + id + + + + IBProjectSource + ./Classes/IBEditor.h + + + + IDECapsuleListView + DVTStackView + + dataSource + id + + + dataSource + + dataSource + id + + + + IBProjectSource + ./Classes/IDECapsuleListView.h + + + + IDEDMArrayController + NSArrayController + + IBProjectSource + ./Classes/IDEDMArrayController.h + + + + IDEDMEditor + IDEEditor + + DVTBorderedView + NSView + IDEDMEditorSourceListController + DVTSplitView + + + + bottomToolbarBorderView + DVTBorderedView + + + sourceListSplitViewPane + NSView + + + sourceListViewController + IDEDMEditorSourceListController + + + splitView + DVTSplitView + + + + IBProjectSource + ./Classes/IDEDMEditor.h + + + + IDEDMEditorController + IDEViewController + + IBProjectSource + ./Classes/IDEDMEditorController.h + + + + IDEDMEditorSourceListController + IDEDMEditorController + + DVTBorderedView + IDEDMEditor + DVTImageAndTextColumn + DVTOutlineView + NSTreeController + + + + borderedView + DVTBorderedView + + + parentEditor + IDEDMEditor + + + primaryColumn + DVTImageAndTextColumn + + + sourceListOutlineView + DVTOutlineView + + + sourceListTreeController + NSTreeController + + + + IBProjectSource + ./Classes/IDEDMEditorSourceListController.h + + + + IDEDMHighlightImageAndTextCell + DVTImageAndTextCell + + IBProjectSource + ./Classes/IDEDMHighlightImageAndTextCell.h + + + + IDEDataModelBrowserEditor + IDEDMEditorController + + IDEDataModelPropertiesTableController + IDECapsuleListView + NSArrayController + IDEDataModelPropertiesTableController + IDEDataModelEntityContentsEditor + IDEDataModelPropertiesTableController + + + + attributesTableViewController + IDEDataModelPropertiesTableController + + + capsuleView + IDECapsuleListView + + + entityArrayController + NSArrayController + + + fetchedPropertiesTableViewController + IDEDataModelPropertiesTableController + + + parentEditor + IDEDataModelEntityContentsEditor + + + relationshipsTableViewController + IDEDataModelPropertiesTableController + + + + IBProjectSource + ./Classes/IDEDataModelBrowserEditor.h + + + + IDEDataModelConfigurationEditor + IDEDMEditorController + + IDECapsuleListView + IDEDataModelEditor + IDEDataModelConfigurationTableController + + + + capsuleListView + IDECapsuleListView + + + parentEditor + IDEDataModelEditor + + + tableController + IDEDataModelConfigurationTableController + + + + IBProjectSource + ./Classes/IDEDataModelConfigurationEditor.h + + + + IDEDataModelConfigurationTableController + IDEDMEditorController + + NSArrayController + NSArrayController + IDEDataModelConfigurationEditor + XDTableView + + + + configurationsArrayController + NSArrayController + + + entitiesArrayController + NSArrayController + + + parentEditor + IDEDataModelConfigurationEditor + + + tableView + XDTableView + + + + IBProjectSource + ./Classes/IDEDataModelConfigurationTableController.h + + + + IDEDataModelDiagramEditor + IDEDMEditorController + + XDDiagramView + IDEDataModelEntityContentsEditor + + + + diagramView + XDDiagramView + + + parentEditor + IDEDataModelEntityContentsEditor + + + + IBProjectSource + ./Classes/IDEDataModelDiagramEditor.h + + + + IDEDataModelEditor + IDEDMEditor + + DVTDelayedMenuButton + DVTDelayedMenuButton + NSSegmentedControl + IDEDataModelConfigurationEditor + IDEDataModelEntityContentsEditor + IDEDataModelFetchRequestEditor + NSSegmentedControl + NSTabView + + + + addEntityButton + DVTDelayedMenuButton + + + addPropertyButton + DVTDelayedMenuButton + + + browserDiagramSegmentControl + NSSegmentedControl + + + configurationViewController + IDEDataModelConfigurationEditor + + + entityContentsViewController + IDEDataModelEntityContentsEditor + + + fetchRequestViewController + IDEDataModelFetchRequestEditor + + + hierarchySegmentControl + NSSegmentedControl + + + tabView + NSTabView + + + + IBProjectSource + ./Classes/IDEDataModelEditor.h + + + + IDEDataModelEntityContentsEditor + IDEDMEditorController + + IDEDataModelBrowserEditor + IDEDataModelDiagramEditor + IDEDataModelEditor + NSTabView + + + + browserViewController + IDEDataModelBrowserEditor + + + diagramViewController + IDEDataModelDiagramEditor + + + parentEditor + IDEDataModelEditor + + + tabView + NSTabView + + + + IBProjectSource + ./Classes/IDEDataModelEntityContentsEditor.h + + + + IDEDataModelFetchRequestEditor + IDEDMEditorController + + NSArrayController + IDEDataModelEditor + IDECapsuleListView + + + + entityController + NSArrayController + + + parentEditor + IDEDataModelEditor + + + tableView + IDECapsuleListView + + + + IBProjectSource + ./Classes/IDEDataModelFetchRequestEditor.h + + + + IDEDataModelPropertiesTableController + IDEDMEditorController + + IDEDMArrayController + NSTableColumn + NSArrayController + IDEDataModelBrowserEditor + IDEDMHighlightImageAndTextCell + XDTableView + + + + arrayController + IDEDMArrayController + + + entitiesColumn + NSTableColumn + + + entityArrayController + NSArrayController + + + parentEditor + IDEDataModelBrowserEditor + + + propertyNameAndImageCell + IDEDMHighlightImageAndTextCell + + + tableView + XDTableView + + + + IBProjectSource + ./Classes/IDEDataModelPropertiesTableController.h + + + + IDEDocSetOutlineView + NSOutlineView + + IBProjectSource + ./Classes/IDEDocSetOutlineView.h + + + + IDEDocSetOutlineViewController + NSObject + + id + id + id + id + id + + + + getDocSetAction: + id + + + showProblemInfoForUpdate: + id + + + subscribeToPublisherAction: + id + + + unsubscribeFromPublisher: + id + + + updateDocSetAction: + id + + + + docSetOutlineView + IDEDocSetOutlineView + + + docSetOutlineView + + docSetOutlineView + IDEDocSetOutlineView + + + + IBProjectSource + ./Classes/IDEDocSetOutlineViewController.h + + + + IDEDocViewingPrefPaneController + IDEViewController + + id + id + id + id + id + id + id + id + id + + + + addSubscription: + id + + + checkForAndInstallUpdatesNow: + id + + + minimumFontSizeComboBoxAction: + id + + + minimumFontSizeEnabledAction: + id + + + showHelp: + id + + + showSubscriptionSheet: + id + + + subscriptionCancelAction: + id + + + toggleAutoCheckForAndInstallUpdates: + id + + + toggleDocSetInfo: + id + + + + DVTGradientImageButton + DVTGradientImageButton + DVTGradientImageButton + NSSplitView + NSView + NSView + DVTBorderedView + DVTBorderedView + NSButton + NSTextView + IDEDocSetOutlineViewController + NSComboBox + NSTextField + NSButton + NSTextField + NSWindow + NSButton + + + + _addButton + DVTGradientImageButton + + + _deleteButton + DVTGradientImageButton + + + _showInfoAreaButton + DVTGradientImageButton + + + _splitView + NSSplitView + + + _splitViewDocSetInfoSubview + NSView + + + _splitViewDocSetsListSubview + NSView + + + borderedViewAroundSplitView + DVTBorderedView + + + borderedViewBelowTable + DVTBorderedView + + + checkAndInstallNowButton + NSButton + + + docSetInfoTextView + NSTextView + + + docSetOutlineViewController + IDEDocSetOutlineViewController + + + minimumFontSizeControl + NSComboBox + + + noUpdatesAvailableMessage + NSTextField + + + showInfoButton + NSButton + + + subscriptionTextField + NSTextField + + + subscriptionWindow + NSWindow + + + validateAddSubscriptionButton + NSButton + + + + IBProjectSource + ./Classes/IDEDocViewingPrefPaneController.h + + + + IDEEditor + IDEViewController + + IBProjectSource + ./Classes/IDEEditor.h + + + + IDEViewController + DVTViewController + + IBProjectSource + ./Classes/IDEViewController.h + + + + IKImageView + + id + id + id + id + + + + copy: + id + + + crop: + id + + + cut: + id + + + paste: + id + + + + IBProjectSource + ./Classes/IKImageView.h + + + + NSDocument + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBProjectSource + ./Classes/NSDocument.h + + + + QLPreviewBubble + NSObject + + id + id + + + + hide: + id + + + show: + id + + + + parentWindow + NSWindow + + + parentWindow + + parentWindow + NSWindow + + + + IBProjectSource + ./Classes/QLPreviewBubble.h + + + + QTMovieView + + id + id + id + id + id + + + + showAll: + id + + + showCustomButton: + id + + + toggleLoops: + id + + + zoomIn: + id + + + zoomOut: + id + + + + IBProjectSource + ./Classes/QTMovieView.h + + + + WebView + + id + id + id + id + + + + reloadFromOrigin: + id + + + resetPageZoom: + id + + + zoomPageIn: + id + + + zoomPageOut: + id + + + + IBProjectSource + ./Classes/WebView.h + + + + XDDiagramView + NSView + + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + _graphLayouterMenuItemAction: + id + + + _zoomPopUpButtonAction: + id + + + alignBottomEdges: + id + + + alignCentersHorizontallyInContainer: + id + + + alignCentersVerticallyInContainer: + id + + + alignHorizontalCenters: + id + + + alignLeftEdges: + id + + + alignRightEdges: + id + + + alignTopEdges: + id + + + alignVerticalCenters: + id + + + bringToFront: + id + + + collapseAllCompartments: + id + + + copy: + id + + + cut: + id + + + delete: + id + + + deleteBackward: + id + + + deleteForward: + id + + + deselectAll: + id + + + diagramZoomIn: + id + + + diagramZoomOut: + id + + + expandAllCompartments: + id + + + flipHorizontally: + id + + + flipVertically: + id + + + layoutGraphicsConcentrically: + id + + + layoutGraphicsHierarchically: + id + + + lock: + id + + + makeSameHeight: + id + + + makeSameWidth: + id + + + moveDown: + id + + + moveDownAndModifySelection: + id + + + moveLeft: + id + + + moveLeftAndModifySelection: + id + + + moveRight: + id + + + moveRightAndModifySelection: + id + + + moveUp: + id + + + moveUpAndModifySelection: + id + + + paste: + id + + + rollDownAllCompartments: + id + + + rollUpAllCompartments: + id + + + selectAll: + id + + + sendToBack: + id + + + sizeToFit: + id + + + toggleGridShown: + id + + + toggleHiddenGraphicsShown: + id + + + togglePageBreaksShown: + id + + + toggleRuler: + id + + + toggleSnapsToGrid: + id + + + unlock: + id + + + + _diagramController + IDEDataModelDiagramEditor + + + _diagramController + + _diagramController + IDEDataModelDiagramEditor + + + + IBProjectSource + ./Classes/XDDiagramView.h + + + + XDTableView + NSTableView + + showAllTableColumns: + id + + + showAllTableColumns: + + showAllTableColumns: + id + + + + IBProjectSource + ./Classes/XDTableView.h + + + + AppDelegate + NSObject + + id + id + + + + applicationShouldTerminate: + id + + + applicationWillFinishLaunching: + id + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {9, 8} + {7, 2} + + YES + + diff --git a/AFNetworking-master/Example/iOS-Info.plist b/AFNetworking-master/Example/iOS-Info.plist new file mode 100755 index 0000000..8d6eba0 --- /dev/null +++ b/AFNetworking-master/Example/iOS-Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + AFNetworking + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIconFiles + + Icon.png + Icon@2x.png + + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + Icon.png + Icon@2x.png + + UIPrerenderedIcon + + + + CFBundleIdentifier + com.alamofire.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0.0 + LSRequiresIPhoneOS + + UIBackgroundModes + + fetch + + UIPrerenderedIcon + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + + diff --git a/AFNetworking-master/Example/main.m b/AFNetworking-master/Example/main.m new file mode 100755 index 0000000..44bc3d6 --- /dev/null +++ b/AFNetworking-master/Example/main.m @@ -0,0 +1,37 @@ +// main.m +// Copyright (c) 2012 Mattt Thompson (http://mattt.me/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#if __IPHONE_OS_VERSION_MIN_REQUIRED + #import + + int main(int argc, char *argv[]) { + @autoreleasepool { + int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate"); + return retVal; + } + } +#else + #import + + int main(int argc, char *argv[]) { + return NSApplicationMain(argc, (const char **)argv); + } +#endif diff --git a/AFNetworking-master/Example/root_ca.cer b/AFNetworking-master/Example/root_ca.cer new file mode 100755 index 0000000000000000000000000000000000000000..dae0196507d9166bbf9de6ed93ed5bd91d2a6f7c GIT binary patch literal 969 zcmXqLVm@ln#I$w+GZP~dlK|727_}^JhuQtym7mtRsg@h?vTHrk&& ztLnL}Q0ws3DJJQQxMViOXD)Ntcx3yg{tGjftaOaDx_oEKHJjTd7E8R&_^LL2_gWe( zWby8^XKvxdy5w!Em&G4m((=PUDRAG9qi=3oOnS`rlw%^#5e>)C->0KGMe7P*nC|y2 z;KS3U1MC5c*hY*|CU8utq&? zd&l;QPp7z6SghtsIkZ15c52JPg{pGxu~Grt3PNWbcjs{jTI}#X&BV;ez_>WsAklyi z7{#*ujEw(TSb)i@&43@o7Y6ZJ4VZzHfh)yU1V#fRgNzj0^gGw*%(v-CW8(-{yshZ|Lo0pNehH&82Z8W| zU7xFN3a0j%{+jp4b?dyFK8D^qCcbdi>Dyd!?)Ky0%ED_;6{j%X3T>aIlJc!9?aaM7 z=4V%!Y|Nakd}3aOl6Haf<4||QM9KFNM_cv%48AQe6jMI&{86fy@#+0i(hF>VoQmr< z>`vh5)a7A|3EF<-C)bRNqVe;E_SKjrTkLgNQvXCvo9oE*Ox~A0j}8cg?>JE=G%@s( zN9K(^T1?UWE>{!`Z-3cUpcXqJVcs5ZaZdd$r{$b8PO_^XycF~OmEz6}p*c2l_Rss% i5HmaZ>>Kx0s_N+r%s(?U)rMSO`QxRY@Z$0p@?HQubYDLJ literal 0 HcmV?d00001 diff --git a/AFNetworking-master/LICENSE b/AFNetworking-master/LICENSE new file mode 100755 index 0000000..91f125b --- /dev/null +++ b/AFNetworking-master/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/AFNetworking-master/README.md b/AFNetworking-master/README.md new file mode 100755 index 0000000..916a242 --- /dev/null +++ b/AFNetworking-master/README.md @@ -0,0 +1,385 @@ +

+ AFNetworking +

+ +[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) + +AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. + +Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. + +Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! + +## How To Get Started + +- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps +- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) +- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking +- Read the [AFNetworking 2.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide) for an overview of the architectural changes from 1.0. + +## Communication + +- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') +- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). +- If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +### Installation with CocoaPods + +[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). + +#### Podfile + +```ruby +platform :ios, '7.0' +pod "AFNetworking", "~> 2.0" +``` + +## Requirements + +| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Notes | +|:--------------------:|:---------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| +| 2.x | iOS 6 | OS X 10.8 | Xcode 5 is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | +| [1.x](https://github.com/AFNetworking/AFNetworking/tree/1.x) | iOS 5 | Mac OS X 10.7 | | +| [0.10.x](https://github.com/AFNetworking/AFNetworking/tree/0.10.x) | iOS 4 | Mac OS X 10.6 | | + +(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). + +> Programming in Swift? Try [Alamofire](https://github.com/Alamofire/Alamofire) for a more conventional set of APIs. + +## Architecture + +### NSURLConnection + +- `AFURLConnectionOperation` +- `AFHTTPRequestOperation` +- `AFHTTPRequestOperationManager` + +### NSURLSession _(iOS 7 / Mac OS X 10.9)_ + +- `AFURLSessionManager` +- `AFHTTPSessionManager` + +### Serialization + +* `` + - `AFHTTPRequestSerializer` + - `AFJSONRequestSerializer` + - `AFPropertyListRequestSerializer` +* `` + - `AFHTTPResponseSerializer` + - `AFJSONResponseSerializer` + - `AFXMLParserResponseSerializer` + - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ + - `AFPropertyListResponseSerializer` + - `AFImageResponseSerializer` + - `AFCompoundResponseSerializer` + +### Additional Functionality + +- `AFSecurityPolicy` +- `AFNetworkReachabilityManager` + +## Usage + +### HTTP Request Operation Manager + +`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. + +#### `GET` Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` URL-Form-Encoded Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +#### `POST` Multi-Part Request + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +NSDictionary *parameters = @{@"foo": @"bar"}; +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:filePath name:@"image" error:nil]; +} success:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"Success: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +``` + +--- + +### AFURLSessionManager + +`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + +#### Creating a Download Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { + NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; + return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; +} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + NSLog(@"File downloaded to: %@", filePath); +}]; +[downloadTask resume]; +``` + +#### Creating an Upload Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"Success: %@ %@", response, responseObject); + } +}]; +[uploadTask resume]; +``` + +#### Creating an Upload Task for a Multi-Part Request, with Progress + +```objective-c +NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; + } error:nil]; + +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; +NSProgress *progress = nil; + +NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; + +[uploadTask resume]; +``` + +#### Creating a Data Task + +```objective-c +NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; + +NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + +NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + if (error) { + NSLog(@"Error: %@", error); + } else { + NSLog(@"%@ %@", response, responseObject); + } +}]; +[dataTask resume]; +``` + +--- + +### Request Serialization + +Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. + +```objective-c +NSString *URLString = @"http://example.com"; +NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; +``` + +#### Query String Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; +``` + + GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### URL Form Parameter Encoding + +```objective-c +[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/x-www-form-urlencoded + + foo=bar&baz[]=1&baz[]=2&baz[]=3 + +#### JSON Parameter Encoding + +```objective-c +[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; +``` + + POST http://example.com/ + Content-Type: application/json + + {"foo": "bar", "baz": [1,2,3]} + +--- + +### Network Reachability Manager + +`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + +**Network reachability is a diagnostic tool that can be used to understand why a request might have failed. It should not be used to determine whether or not to make a request.** + +#### Shared Network Reachability + +```objective-c +[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); +}]; +``` + +#### HTTP Manager Reachability + +```objective-c +NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; +AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; + +NSOperationQueue *operationQueue = manager.operationQueue; +[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusReachableViaWWAN: + case AFNetworkReachabilityStatusReachableViaWiFi: + [operationQueue setSuspended:NO]; + break; + case AFNetworkReachabilityStatusNotReachable: + default: + [operationQueue setSuspended:YES]; + break; + } +}]; + +[manager.reachabilityManager startMonitoring]; +``` + +--- + +### Security Policy + +`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + +Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + +#### Allowing Invalid SSL Certificates + +```objective-c +AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production +``` + +--- + +### AFHTTPRequestOperation + +`AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. + +Although `AFHTTPRequestOperationManager` is usually the best way to go about making requests, `AFHTTPRequestOperation` can be used by itself. + +#### `GET` with `AFHTTPRequestOperation` + +```objective-c +NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; +NSURLRequest *request = [NSURLRequest requestWithURL:URL]; +AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; +op.responseSerializer = [AFJSONResponseSerializer serializer]; +[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + NSLog(@"JSON: %@", responseObject); +} failure:^(AFHTTPRequestOperation *operation, NSError *error) { + NSLog(@"Error: %@", error); +}]; +[[NSOperationQueue mainQueue] addOperation:op]; +``` + +#### Batch of Operations + +```objective-c +NSMutableArray *mutableOperations = [NSMutableArray array]; +for (NSURL *fileURL in filesToUpload) { + NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; + }]; + + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [mutableOperations addObject:operation]; +} + +NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { + NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations); +} completionBlock:^(NSArray *operations) { + NSLog(@"All operations in batch complete"); +}]; +[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; +``` + +## Unit Tests + +AFNetworking includes a suite of unit tests within the Tests subdirectory. In order to run the unit tests, you must install the testing dependencies via [CocoaPods](http://cocoapods.org/): + + $ cd Tests + $ pod install + +Once testing dependencies are installed, you can execute the test suite via the 'iOS Tests' and 'OS X Tests' schemes within Xcode. + +### Running Tests from the Command Line + +Tests can also be run from the command line or within a continuous integration environment. The [`xcpretty`](https://github.com/mneorr/xcpretty) utility needs to be installed before running the tests from the command line: + + $ gem install xcpretty + +Once `xcpretty` is installed, you can execute the suite via `rake test`. + +## Credits + +AFNetworking is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). + +AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). + +AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). + +And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). + +### Security Disclosure + +If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## License + +AFNetworking is released under the MIT license. See LICENSE for details. diff --git a/AFNetworking-master/Rakefile b/AFNetworking-master/Rakefile new file mode 100755 index 0000000..09aac37 --- /dev/null +++ b/AFNetworking-master/Rakefile @@ -0,0 +1,50 @@ +include FileUtils::Verbose + +namespace :test do + task :prepare do + mkdir_p "Tests/AFNetworking Tests.xcodeproj/xcshareddata/xcschemes" + cp Dir.glob('Tests/Schemes/*.xcscheme'), "Tests/AFNetworking Tests.xcodeproj/xcshareddata/xcschemes/" + end + + desc "Run the AFNetworking Tests for iOS" + task :ios => :prepare do + run_tests('iOS Tests', 'iphonesimulator') + tests_failed('iOS') unless $?.success? + end + + desc "Run the AFNetworking Tests for Mac OS X" + task :osx => :prepare do + run_tests('OS X Tests', 'macosx') + tests_failed('OSX') unless $?.success? + end +end + +desc "Run the AFNetworking Tests for iOS & Mac OS X" +task :test do + Rake::Task['test:ios'].invoke + Rake::Task['test:osx'].invoke if is_mavericks_or_above +end + +task :default => 'test' + + +private + +def run_tests(scheme, sdk) + sh("xcodebuild -workspace AFNetworking.xcworkspace -scheme '#{scheme}' -sdk '#{sdk}' -configuration Release clean test | xcpretty -c ; exit ${PIPESTATUS[0]}") rescue nil +end + +def is_mavericks_or_above + osx_version = `sw_vers -productVersion`.chomp + Gem::Version.new(osx_version) >= Gem::Version.new('10.9') +end + +def tests_failed(platform) + puts red("#{platform} unit tests failed") + exit $?.exitstatus +end + +def red(string) + "\033[0;31m! #{string}" +end + diff --git a/AFNetworking-master/Tests/AFNetworking Tests.xcodeproj/project.pbxproj b/AFNetworking-master/Tests/AFNetworking Tests.xcodeproj/project.pbxproj new file mode 100755 index 0000000..faf2711 --- /dev/null +++ b/AFNetworking-master/Tests/AFNetworking Tests.xcodeproj/project.pbxproj @@ -0,0 +1,779 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 2902D27917DF4E1100C81C5A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B9ED5C17DF4D350021E4D5 /* XCTest.framework */; }; + 2902D27A17DF4E1200C81C5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2544EC35173BE382004117E8 /* Foundation.framework */; }; + 2902D27B17DF4E1200C81C5A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29133DD617DE77ED006E0493 /* UIKit.framework */; }; + 2902D28117DF4E1200C81C5A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2902D27F17DF4E1200C81C5A /* InfoPlist.strings */; }; + 2902D28D17DF4E2900C81C5A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B9ED5C17DF4D350021E4D5 /* XCTest.framework */; }; + 2902D28E17DF4E2A00C81C5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2544EC35173BE382004117E8 /* Foundation.framework */; }; + 2902D29517DF4E2A00C81C5A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2902D29317DF4E2A00C81C5A /* InfoPlist.strings */; }; + 2902D29C17DF4E3700C81C5A /* AFTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B9ED7617DF4D790021E4D5 /* AFTestCase.m */; }; + 2902D29D17DF4E3800C81C5A /* AFTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B9ED7617DF4D790021E4D5 /* AFTestCase.m */; }; + 29CBFC3917DF4F120021AB75 /* AFHTTPRequestOperationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3817DF4F120021AB75 /* AFHTTPRequestOperationTests.m */; }; + 29CBFC3C17DF541F0021AB75 /* AFJSONSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3B17DF541F0021AB75 /* AFJSONSerializationTests.m */; }; + 29CBFC3D17DF541F0021AB75 /* AFJSONSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3B17DF541F0021AB75 /* AFJSONSerializationTests.m */; }; + 29CBFC3F17DF58000021AB75 /* AFHTTPRequestSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3E17DF58000021AB75 /* AFHTTPRequestSerializationTests.m */; }; + 29CBFC4017DF58000021AB75 /* AFHTTPRequestSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3E17DF58000021AB75 /* AFHTTPRequestSerializationTests.m */; }; + 29CBFC5A17DF61B30021AB75 /* AFSecurityPolicyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC5917DF61B30021AB75 /* AFSecurityPolicyTests.m */; }; + 29CBFC7617DF697C0021AB75 /* HTTPBinOrgServerTrustChain in Resources */ = {isa = PBXBuildFile; fileRef = 29CBFC7517DF697C0021AB75 /* HTTPBinOrgServerTrustChain */; }; + 29CBFC7717DF697C0021AB75 /* HTTPBinOrgServerTrustChain in Resources */ = {isa = PBXBuildFile; fileRef = 29CBFC7517DF697C0021AB75 /* HTTPBinOrgServerTrustChain */; }; + 29CBFC8717DF74C60021AB75 /* ADNNetServerTrustChain in Resources */ = {isa = PBXBuildFile; fileRef = 29CBFC8617DF74C60021AB75 /* ADNNetServerTrustChain */; }; + 29CBFC8817DF74C60021AB75 /* ADNNetServerTrustChain in Resources */ = {isa = PBXBuildFile; fileRef = 29CBFC8617DF74C60021AB75 /* ADNNetServerTrustChain */; }; + 36DE264E18053E930062F4E3 /* adn_0.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264B18053E930062F4E3 /* adn_0.cer */; }; + 36DE264F18053E930062F4E3 /* adn_1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264C18053E930062F4E3 /* adn_1.cer */; }; + 36DE265018053E930062F4E3 /* adn_2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264D18053E930062F4E3 /* adn_2.cer */; }; + 36DE26511805445B0062F4E3 /* AFSecurityPolicyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC5917DF61B30021AB75 /* AFSecurityPolicyTests.m */; }; + 36DE2652180544600062F4E3 /* AFHTTPRequestOperationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CBFC3817DF4F120021AB75 /* AFHTTPRequestOperationTests.m */; }; + 3D56634E3A564CEE86172413 /* libPods-osx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 96A923755B00464187DEDBAF /* libPods-osx.a */; }; + 6D86BAA5C6174E98AE719CE9 /* libPods-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E73C267F33406A9F92476C /* libPods-ios.a */; }; + 77D65EBC1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 77D65EBB1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m */; }; + 77D65EBD1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 77D65EBB1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m */; }; + 943B1F41192E406C00304316 /* AFURLSessionManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 943B1F40192E406C00304316 /* AFURLSessionManagerTests.m */; }; + A74DA00918D2FB9400F3B969 /* AltName.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00618D2FB9400F3B969 /* AltName.cer */; }; + A74DA00A18D2FB9400F3B969 /* AltName.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00618D2FB9400F3B969 /* AltName.cer */; }; + A74DA00B18D2FB9400F3B969 /* foobar.com.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00718D2FB9400F3B969 /* foobar.com.cer */; }; + A74DA00C18D2FB9400F3B969 /* foobar.com.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00718D2FB9400F3B969 /* foobar.com.cer */; }; + A74DA00D18D2FB9400F3B969 /* NoDomains.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00818D2FB9400F3B969 /* NoDomains.cer */; }; + A74DA00E18D2FB9400F3B969 /* NoDomains.cer in Resources */ = {isa = PBXBuildFile; fileRef = A74DA00818D2FB9400F3B969 /* NoDomains.cer */; }; + B6774DC918FBB49E0044DB17 /* AFNetworkActivityManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B6774DC818FBB49E0044DB17 /* AFNetworkActivityManagerTests.m */; }; + B6C1B95718ABF9E300C8B21A /* adn_0.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264B18053E930062F4E3 /* adn_0.cer */; }; + B6C1B95818ABF9E300C8B21A /* adn_1.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264C18053E930062F4E3 /* adn_1.cer */; }; + B6C1B95918ABF9E300C8B21A /* adn_2.cer in Resources */ = {isa = PBXBuildFile; fileRef = 36DE264D18053E930062F4E3 /* adn_2.cer */; }; + CBBDB1651A7981FB00D412EE /* httpbinorg_01162016.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1641A7981E200D412EE /* httpbinorg_01162016.cer */; }; + CBBDB1661A79820700D412EE /* httpbinorg_01162016.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1641A7981E200D412EE /* httpbinorg_01162016.cer */; }; + CBBDB16A1A798AB500D412EE /* AddTrust_External_CA_Root.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1671A798AB500D412EE /* AddTrust_External_CA_Root.cer */; }; + CBBDB16B1A798AB500D412EE /* AddTrust_External_CA_Root.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1671A798AB500D412EE /* AddTrust_External_CA_Root.cer */; }; + CBBDB16C1A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1681A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer */; }; + CBBDB16D1A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1681A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer */; }; + CBBDB16E1A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1691A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer */; }; + CBBDB16F1A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer in Resources */ = {isa = PBXBuildFile; fileRef = CBBDB1691A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer */; }; + DE533FCE1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE533FCD1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m */; }; + DE533FCF1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE533FCD1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m */; }; + F837FFAF195744A0009078A0 /* AFHTTPResponseSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F837FFAE195744A0009078A0 /* AFHTTPResponseSerializationTests.m */; }; + F837FFB0195744A0009078A0 /* AFHTTPResponseSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F837FFAE195744A0009078A0 /* AFHTTPResponseSerializationTests.m */; }; + F87382951948AC15000B7AFA /* AFHTTPSessionManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F87382941948AC15000B7AFA /* AFHTTPSessionManagerTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2544EC35173BE382004117E8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 2544EC44173BE382004117E8 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 2544EC80173BFAA8004117E8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 2544EC83173BFAA8004117E8 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 2544EC84173BFAA8004117E8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 2544EC85173BFAA8004117E8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 25C4EC2A173D7DB30083E116 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 25C4EC2C173D7DBA0083E116 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/CoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 25C4EC2E173D7DC40083E116 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; + 25C4EC30173D7DCA0083E116 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + 25C4EC32173D7DD20083E116 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 2902D27817DF4E1100C81C5A /* iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2902D27E17DF4E1200C81C5A /* iOS Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS Tests-Info.plist"; sourceTree = ""; }; + 2902D28017DF4E1200C81C5A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 2902D28417DF4E1200C81C5A /* iOS Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS Tests-Prefix.pch"; sourceTree = ""; }; + 2902D28C17DF4E2900C81C5A /* OS X Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OS X Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2902D29217DF4E2A00C81C5A /* OS X Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "OS X Tests-Info.plist"; sourceTree = ""; }; + 2902D29417DF4E2A00C81C5A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 2902D29817DF4E2A00C81C5A /* OS X Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OS X Tests-Prefix.pch"; sourceTree = ""; }; + 29133DD417DE77A5006E0493 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 29133DD617DE77ED006E0493 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 29133DD817DE7829006E0493 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 29B9ED5C17DF4D350021E4D5 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 29B9ED6D17DF4D670021E4D5 /* AFHTTPClientTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFHTTPClientTests.m; sourceTree = ""; }; + 29B9ED6E17DF4D670021E4D5 /* AFHTTPRequestOperationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationTests.m; sourceTree = ""; }; + 29B9ED6F17DF4D670021E4D5 /* AFImageRequestOperationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFImageRequestOperationTests.m; sourceTree = ""; }; + 29B9ED7017DF4D670021E4D5 /* AFJSONRequestOperationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFJSONRequestOperationTests.m; sourceTree = ""; }; + 29B9ED7117DF4D670021E4D5 /* AFMockURLProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AFMockURLProtocol.h; sourceTree = ""; }; + 29B9ED7217DF4D670021E4D5 /* AFMockURLProtocol.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFMockURLProtocol.m; sourceTree = ""; }; + 29B9ED7317DF4D670021E4D5 /* AFNetworkingTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AFNetworkingTests.h; sourceTree = ""; }; + 29B9ED7417DF4D670021E4D5 /* AFNetworkingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFNetworkingTests.m; sourceTree = ""; }; + 29B9ED7517DF4D670021E4D5 /* AFURLConnectionOperationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperationTests.m; sourceTree = ""; }; + 29B9ED7617DF4D790021E4D5 /* AFTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFTestCase.m; sourceTree = ""; }; + 29B9ED7817DF4D830021E4D5 /* AFTestCase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AFTestCase.h; sourceTree = ""; }; + 29CBFC3817DF4F120021AB75 /* AFHTTPRequestOperationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationTests.m; sourceTree = ""; }; + 29CBFC3B17DF541F0021AB75 /* AFJSONSerializationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFJSONSerializationTests.m; sourceTree = ""; }; + 29CBFC3E17DF58000021AB75 /* AFHTTPRequestSerializationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestSerializationTests.m; sourceTree = ""; }; + 29CBFC5917DF61B30021AB75 /* AFSecurityPolicyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicyTests.m; sourceTree = ""; }; + 29CBFC7517DF697C0021AB75 /* HTTPBinOrgServerTrustChain */ = {isa = PBXFileReference; lastKnownFileType = folder; path = HTTPBinOrgServerTrustChain; sourceTree = ""; }; + 29CBFC8617DF74C60021AB75 /* ADNNetServerTrustChain */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ADNNetServerTrustChain; sourceTree = ""; }; + 2B6D24F8E1B74E10A269E8B3 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 36DE264B18053E930062F4E3 /* adn_0.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = adn_0.cer; path = Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer; sourceTree = ""; }; + 36DE264C18053E930062F4E3 /* adn_1.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = adn_1.cer; path = Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer; sourceTree = ""; }; + 36DE264D18053E930062F4E3 /* adn_2.cer */ = {isa = PBXFileReference; lastKnownFileType = file; name = adn_2.cer; path = Resources/ADN.net/ADNNetServerTrustChain/adn_2.cer; sourceTree = ""; }; + 520A0FB27D040CF3258787D2 /* Pods-osx.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-osx.debug.xcconfig"; path = "Pods/Target Support Files/Pods-osx/Pods-osx.debug.xcconfig"; sourceTree = ""; }; + 55E73C267F33406A9F92476C /* libPods-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 77D65EBB1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFPropertyListResponseSerializerTests.m; sourceTree = ""; }; + 943B1F40192E406C00304316 /* AFURLSessionManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManagerTests.m; sourceTree = ""; }; + 95D45FB81CA3594FA8CF7430 /* Pods-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ios/Pods-ios.debug.xcconfig"; sourceTree = ""; }; + 96A923755B00464187DEDBAF /* libPods-osx.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-osx.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + A74DA00618D2FB9400F3B969 /* AltName.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = AltName.cer; sourceTree = ""; }; + A74DA00718D2FB9400F3B969 /* foobar.com.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = foobar.com.cer; sourceTree = ""; }; + A74DA00818D2FB9400F3B969 /* NoDomains.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = NoDomains.cer; sourceTree = ""; }; + B6774DC818FBB49E0044DB17 /* AFNetworkActivityManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkActivityManagerTests.m; sourceTree = ""; }; + BC9AB30A551203E10B6C890E /* Pods-osx.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-osx.release.xcconfig"; path = "Pods/Target Support Files/Pods-osx/Pods-osx.release.xcconfig"; sourceTree = ""; }; + C280748C740FAD506581E3CE /* Pods-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios.release.xcconfig"; path = "Pods/Target Support Files/Pods-ios/Pods-ios.release.xcconfig"; sourceTree = ""; }; + CBBDB1641A7981E200D412EE /* httpbinorg_01162016.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = httpbinorg_01162016.cer; sourceTree = ""; }; + CBBDB1671A798AB500D412EE /* AddTrust_External_CA_Root.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = AddTrust_External_CA_Root.cer; sourceTree = ""; }; + CBBDB1681A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = COMODO_RSA_Certification_Authority.cer; sourceTree = ""; }; + CBBDB1691A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = COMODO_RSA_Domain_Validation_Secure_Server_CA.cer; sourceTree = ""; }; + DE533FCD1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManagerTests.m; sourceTree = ""; }; + F837FFAE195744A0009078A0 /* AFHTTPResponseSerializationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPResponseSerializationTests.m; sourceTree = ""; }; + F87382941948AC15000B7AFA /* AFHTTPSessionManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManagerTests.m; sourceTree = ""; }; + F8C6F281174D2C6200B154D5 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = ../Example/Icon.png; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2902D27517DF4E1100C81C5A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2902D27917DF4E1100C81C5A /* XCTest.framework in Frameworks */, + 2902D27B17DF4E1200C81C5A /* UIKit.framework in Frameworks */, + 2902D27A17DF4E1200C81C5A /* Foundation.framework in Frameworks */, + 6D86BAA5C6174E98AE719CE9 /* libPods-ios.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2902D28917DF4E2900C81C5A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2902D28D17DF4E2900C81C5A /* XCTest.framework in Frameworks */, + 2902D28E17DF4E2A00C81C5A /* Foundation.framework in Frameworks */, + 3D56634E3A564CEE86172413 /* libPods-osx.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2544EC29173BE382004117E8 = { + isa = PBXGroup; + children = ( + 36DE264B18053E930062F4E3 /* adn_0.cer */, + 36DE264C18053E930062F4E3 /* adn_1.cer */, + 36DE264D18053E930062F4E3 /* adn_2.cer */, + 25A753091747FC7E00F04F2F /* Resources */, + 29B9ED6017DF4D350021E4D5 /* Tests */, + 2902D27C17DF4E1200C81C5A /* iOS Tests */, + 2902D29017DF4E2A00C81C5A /* OS X Tests */, + 2544EC34173BE382004117E8 /* Frameworks */, + 2544EC33173BE382004117E8 /* Products */, + 792D9983BBDACA0DD7F01333 /* Pods */, + ); + sourceTree = ""; + }; + 2544EC33173BE382004117E8 /* Products */ = { + isa = PBXGroup; + children = ( + 2902D27817DF4E1100C81C5A /* iOS Tests.xctest */, + 2902D28C17DF4E2900C81C5A /* OS X Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 2544EC34173BE382004117E8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 29133DD817DE7829006E0493 /* Security.framework */, + 29133DD617DE77ED006E0493 /* UIKit.framework */, + 29133DD417DE77A5006E0493 /* CoreGraphics.framework */, + 25C4EC32173D7DD20083E116 /* SystemConfiguration.framework */, + 25C4EC30173D7DCA0083E116 /* MobileCoreServices.framework */, + 25C4EC2E173D7DC40083E116 /* CFNetwork.framework */, + 25C4EC2C173D7DBA0083E116 /* CoreServices.framework */, + 25C4EC2A173D7DB30083E116 /* SystemConfiguration.framework */, + 2544EC35173BE382004117E8 /* Foundation.framework */, + 2544EC44173BE382004117E8 /* SenTestingKit.framework */, + 2544EC80173BFAA8004117E8 /* Cocoa.framework */, + 29B9ED5C17DF4D350021E4D5 /* XCTest.framework */, + 2544EC82173BFAA8004117E8 /* Other Frameworks */, + 55E73C267F33406A9F92476C /* libPods-ios.a */, + 96A923755B00464187DEDBAF /* libPods-osx.a */, + 2B6D24F8E1B74E10A269E8B3 /* libPods.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2544EC82173BFAA8004117E8 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 2544EC83173BFAA8004117E8 /* AppKit.framework */, + 2544EC84173BFAA8004117E8 /* CoreData.framework */, + 2544EC85173BFAA8004117E8 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 25A753091747FC7E00F04F2F /* Resources */ = { + isa = PBXGroup; + children = ( + F8C6F281174D2C6200B154D5 /* Icon.png */, + F8E801E9175AC34D008D3886 /* Certificates */, + ); + name = Resources; + sourceTree = ""; + }; + 2902D27C17DF4E1200C81C5A /* iOS Tests */ = { + isa = PBXGroup; + children = ( + 2902D27D17DF4E1200C81C5A /* Supporting Files */, + ); + path = "iOS Tests"; + sourceTree = ""; + }; + 2902D27D17DF4E1200C81C5A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2902D27E17DF4E1200C81C5A /* iOS Tests-Info.plist */, + 2902D27F17DF4E1200C81C5A /* InfoPlist.strings */, + 2902D28417DF4E1200C81C5A /* iOS Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 2902D29017DF4E2A00C81C5A /* OS X Tests */ = { + isa = PBXGroup; + children = ( + 2902D29117DF4E2A00C81C5A /* Supporting Files */, + ); + path = "OS X Tests"; + sourceTree = ""; + }; + 2902D29117DF4E2A00C81C5A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2902D29217DF4E2A00C81C5A /* OS X Tests-Info.plist */, + 2902D29317DF4E2A00C81C5A /* InfoPlist.strings */, + 2902D29817DF4E2A00C81C5A /* OS X Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 29B9ED6017DF4D350021E4D5 /* Tests */ = { + isa = PBXGroup; + children = ( + 29B9ED6C17DF4D670021E4D5 /* 1.0 Tests */, + 29B9ED7817DF4D830021E4D5 /* AFTestCase.h */, + 29B9ED7617DF4D790021E4D5 /* AFTestCase.m */, + 29CBFC3817DF4F120021AB75 /* AFHTTPRequestOperationTests.m */, + F87382941948AC15000B7AFA /* AFHTTPSessionManagerTests.m */, + 29CBFC3E17DF58000021AB75 /* AFHTTPRequestSerializationTests.m */, + F837FFAE195744A0009078A0 /* AFHTTPResponseSerializationTests.m */, + 29CBFC3B17DF541F0021AB75 /* AFJSONSerializationTests.m */, + 77D65EBB1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m */, + 29CBFC5917DF61B30021AB75 /* AFSecurityPolicyTests.m */, + B6774DC818FBB49E0044DB17 /* AFNetworkActivityManagerTests.m */, + 943B1F40192E406C00304316 /* AFURLSessionManagerTests.m */, + DE533FCD1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m */, + ); + path = Tests; + sourceTree = ""; + }; + 29B9ED6C17DF4D670021E4D5 /* 1.0 Tests */ = { + isa = PBXGroup; + children = ( + 29B9ED7117DF4D670021E4D5 /* AFMockURLProtocol.h */, + 29B9ED7217DF4D670021E4D5 /* AFMockURLProtocol.m */, + 29B9ED7317DF4D670021E4D5 /* AFNetworkingTests.h */, + 29B9ED7417DF4D670021E4D5 /* AFNetworkingTests.m */, + 29B9ED6D17DF4D670021E4D5 /* AFHTTPClientTests.m */, + 29B9ED6E17DF4D670021E4D5 /* AFHTTPRequestOperationTests.m */, + 29B9ED6F17DF4D670021E4D5 /* AFImageRequestOperationTests.m */, + 29B9ED7017DF4D670021E4D5 /* AFJSONRequestOperationTests.m */, + 29B9ED7517DF4D670021E4D5 /* AFURLConnectionOperationTests.m */, + ); + path = "1.0 Tests"; + sourceTree = ""; + }; + 29CBFC4E17DF61920021AB75 /* HTTPBin.org */ = { + isa = PBXGroup; + children = ( + CBBDB1671A798AB500D412EE /* AddTrust_External_CA_Root.cer */, + CBBDB1681A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer */, + CBBDB1691A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer */, + CBBDB1641A7981E200D412EE /* httpbinorg_01162016.cer */, + 29CBFC7517DF697C0021AB75 /* HTTPBinOrgServerTrustChain */, + ); + name = HTTPBin.org; + path = Resources/HTTPBin.org; + sourceTree = ""; + }; + 29CBFC7B17DF74A80021AB75 /* ADN.net */ = { + isa = PBXGroup; + children = ( + 29CBFC8617DF74C60021AB75 /* ADNNetServerTrustChain */, + ); + name = ADN.net; + path = Resources/ADN.net; + sourceTree = ""; + }; + 792D9983BBDACA0DD7F01333 /* Pods */ = { + isa = PBXGroup; + children = ( + 95D45FB81CA3594FA8CF7430 /* Pods-ios.debug.xcconfig */, + C280748C740FAD506581E3CE /* Pods-ios.release.xcconfig */, + 520A0FB27D040CF3258787D2 /* Pods-osx.debug.xcconfig */, + BC9AB30A551203E10B6C890E /* Pods-osx.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + A74DA00518D2FB9400F3B969 /* SelfSigned */ = { + isa = PBXGroup; + children = ( + A74DA00618D2FB9400F3B969 /* AltName.cer */, + A74DA00718D2FB9400F3B969 /* foobar.com.cer */, + A74DA00818D2FB9400F3B969 /* NoDomains.cer */, + ); + name = SelfSigned; + path = Resources/SelfSigned; + sourceTree = ""; + }; + F8E801E9175AC34D008D3886 /* Certificates */ = { + isa = PBXGroup; + children = ( + 29CBFC7B17DF74A80021AB75 /* ADN.net */, + 29CBFC4E17DF61920021AB75 /* HTTPBin.org */, + A74DA00518D2FB9400F3B969 /* SelfSigned */, + ); + name = Certificates; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2902D27717DF4E1100C81C5A /* iOS Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2902D28717DF4E1200C81C5A /* Build configuration list for PBXNativeTarget "iOS Tests" */; + buildPhases = ( + 54CD36584E3B40719F14C3C9 /* Check Pods Manifest.lock */, + 2902D27417DF4E1100C81C5A /* Sources */, + 2902D27517DF4E1100C81C5A /* Frameworks */, + 2902D27617DF4E1100C81C5A /* Resources */, + DFF6BB8B6C8D4F8ABC235667 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "iOS Tests"; + productName = "iOS Tests"; + productReference = 2902D27817DF4E1100C81C5A /* iOS Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 2902D28B17DF4E2900C81C5A /* OS X Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2902D29917DF4E2A00C81C5A /* Build configuration list for PBXNativeTarget "OS X Tests" */; + buildPhases = ( + 6949C05DBEB94BC2BAE81768 /* Check Pods Manifest.lock */, + 2902D28817DF4E2900C81C5A /* Sources */, + 2902D28917DF4E2900C81C5A /* Frameworks */, + 2902D28A17DF4E2900C81C5A /* Resources */, + D728EB5862164B87922C9B80 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "OS X Tests"; + productName = "OS X Tests"; + productReference = 2902D28C17DF4E2900C81C5A /* OS X Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2544EC2A173BE382004117E8 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + ORGANIZATIONNAME = AFNetworking; + }; + buildConfigurationList = 2544EC2D173BE382004117E8 /* Build configuration list for PBXProject "AFNetworking Tests" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 2544EC29173BE382004117E8; + productRefGroup = 2544EC33173BE382004117E8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2902D27717DF4E1100C81C5A /* iOS Tests */, + 2902D28B17DF4E2900C81C5A /* OS X Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2902D27617DF4E1100C81C5A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBBDB16A1A798AB500D412EE /* AddTrust_External_CA_Root.cer in Resources */, + 29CBFC8717DF74C60021AB75 /* ADNNetServerTrustChain in Resources */, + A74DA00D18D2FB9400F3B969 /* NoDomains.cer in Resources */, + 2902D28117DF4E1200C81C5A /* InfoPlist.strings in Resources */, + CBBDB1651A7981FB00D412EE /* httpbinorg_01162016.cer in Resources */, + 36DE264E18053E930062F4E3 /* adn_0.cer in Resources */, + 36DE264F18053E930062F4E3 /* adn_1.cer in Resources */, + CBBDB16C1A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer in Resources */, + CBBDB16E1A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer in Resources */, + A74DA00B18D2FB9400F3B969 /* foobar.com.cer in Resources */, + 36DE265018053E930062F4E3 /* adn_2.cer in Resources */, + 29CBFC7617DF697C0021AB75 /* HTTPBinOrgServerTrustChain in Resources */, + A74DA00918D2FB9400F3B969 /* AltName.cer in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2902D28A17DF4E2900C81C5A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBBDB16B1A798AB500D412EE /* AddTrust_External_CA_Root.cer in Resources */, + 29CBFC8817DF74C60021AB75 /* ADNNetServerTrustChain in Resources */, + A74DA00E18D2FB9400F3B969 /* NoDomains.cer in Resources */, + 2902D29517DF4E2A00C81C5A /* InfoPlist.strings in Resources */, + CBBDB1661A79820700D412EE /* httpbinorg_01162016.cer in Resources */, + B6C1B95718ABF9E300C8B21A /* adn_0.cer in Resources */, + B6C1B95818ABF9E300C8B21A /* adn_1.cer in Resources */, + CBBDB16D1A798AB500D412EE /* COMODO_RSA_Certification_Authority.cer in Resources */, + CBBDB16F1A798AB500D412EE /* COMODO_RSA_Domain_Validation_Secure_Server_CA.cer in Resources */, + A74DA00C18D2FB9400F3B969 /* foobar.com.cer in Resources */, + B6C1B95918ABF9E300C8B21A /* adn_2.cer in Resources */, + 29CBFC7717DF697C0021AB75 /* HTTPBinOrgServerTrustChain in Resources */, + A74DA00A18D2FB9400F3B969 /* AltName.cer in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 54CD36584E3B40719F14C3C9 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 6949C05DBEB94BC2BAE81768 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + D728EB5862164B87922C9B80 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-osx/Pods-osx-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + DFF6BB8B6C8D4F8ABC235667 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ios/Pods-ios-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2902D27417DF4E1100C81C5A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 29CBFC3917DF4F120021AB75 /* AFHTTPRequestOperationTests.m in Sources */, + 943B1F41192E406C00304316 /* AFURLSessionManagerTests.m in Sources */, + F837FFAF195744A0009078A0 /* AFHTTPResponseSerializationTests.m in Sources */, + 29CBFC5A17DF61B30021AB75 /* AFSecurityPolicyTests.m in Sources */, + 29CBFC3F17DF58000021AB75 /* AFHTTPRequestSerializationTests.m in Sources */, + B6774DC918FBB49E0044DB17 /* AFNetworkActivityManagerTests.m in Sources */, + DE533FCE1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m in Sources */, + 29CBFC3C17DF541F0021AB75 /* AFJSONSerializationTests.m in Sources */, + 77D65EBC1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m in Sources */, + 2902D29C17DF4E3700C81C5A /* AFTestCase.m in Sources */, + F87382951948AC15000B7AFA /* AFHTTPSessionManagerTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2902D28817DF4E2900C81C5A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F837FFB0195744A0009078A0 /* AFHTTPResponseSerializationTests.m in Sources */, + 36DE2652180544600062F4E3 /* AFHTTPRequestOperationTests.m in Sources */, + 36DE26511805445B0062F4E3 /* AFSecurityPolicyTests.m in Sources */, + 29CBFC4017DF58000021AB75 /* AFHTTPRequestSerializationTests.m in Sources */, + 29CBFC3D17DF541F0021AB75 /* AFJSONSerializationTests.m in Sources */, + 77D65EBD1848A03C004CA024 /* AFPropertyListResponseSerializerTests.m in Sources */, + DE533FCF1ACCF34200C62CFB /* AFNetworkReachabilityManagerTests.m in Sources */, + 2902D29D17DF4E3800C81C5A /* AFTestCase.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2902D27F17DF4E1200C81C5A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 2902D28017DF4E1200C81C5A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 2902D29317DF4E2A00C81C5A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 2902D29417DF4E2A00C81C5A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2544EC55173BE382004117E8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 2544EC56173BE382004117E8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2902D28517DF4E1200C81C5A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 95D45FB81CA3594FA8CF7430 /* Pods-ios.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOS Tests/iOS Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "iOS Tests/iOS Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 2902D28617DF4E1200C81C5A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C280748C740FAD506581E3CE /* Pods-ios.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOS Tests/iOS Tests-Prefix.pch"; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "iOS Tests/iOS Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; + 2902D29A17DF4E2A00C81C5A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 520A0FB27D040CF3258787D2 /* Pods-osx.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "OS X Tests/OS X Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "OS X Tests/OS X Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 2902D29B17DF4E2A00C81C5A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BC9AB30A551203E10B6C890E /* Pods-osx.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + COMBINE_HIDPI_IMAGES = YES; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "OS X Tests/OS X Tests-Prefix.pch"; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = "OS X Tests/OS X Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2544EC2D173BE382004117E8 /* Build configuration list for PBXProject "AFNetworking Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2544EC55173BE382004117E8 /* Debug */, + 2544EC56173BE382004117E8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2902D28717DF4E1200C81C5A /* Build configuration list for PBXNativeTarget "iOS Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2902D28517DF4E1200C81C5A /* Debug */, + 2902D28617DF4E1200C81C5A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2902D29917DF4E2A00C81C5A /* Build configuration list for PBXNativeTarget "OS X Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2902D29A17DF4E2A00C81C5A /* Debug */, + 2902D29B17DF4E2A00C81C5A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2544EC2A173BE382004117E8 /* Project object */; +} diff --git a/AFNetworking-master/Tests/AFNetworking-Prefix.pch b/AFNetworking-master/Tests/AFNetworking-Prefix.pch new file mode 100755 index 0000000..59f8ee7 --- /dev/null +++ b/AFNetworking-master/Tests/AFNetworking-Prefix.pch @@ -0,0 +1,16 @@ +// +// Prefix header for all source files of the 'AFNetworking' target in the 'AFNetworking' project +// + +#ifdef __OBJC__ + #import + + #import + #if __IPHONE_OS_VERSION_MIN_REQUIRED + #import + #import + #else + #import + #import + #endif +#endif diff --git a/AFNetworking-master/Tests/AFNetworkingTests-Info.plist b/AFNetworking-master/Tests/AFNetworkingTests-Info.plist new file mode 100755 index 0000000..28925ff --- /dev/null +++ b/AFNetworking-master/Tests/AFNetworkingTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.afnetworking.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/AFNetworking-master/Tests/OS X Tests/OS X Tests-Info.plist b/AFNetworking-master/Tests/OS X Tests/OS X Tests-Info.plist new file mode 100755 index 0000000..32379be --- /dev/null +++ b/AFNetworking-master/Tests/OS X Tests/OS X Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.alamofire.afnetworking.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/AFNetworking-master/Tests/OS X Tests/OS X Tests-Prefix.pch b/AFNetworking-master/Tests/OS X Tests/OS X Tests-Prefix.pch new file mode 100755 index 0000000..eb2007e --- /dev/null +++ b/AFNetworking-master/Tests/OS X Tests/OS X Tests-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/AFNetworking-master/Tests/OS X Tests/en.lproj/InfoPlist.strings b/AFNetworking-master/Tests/OS X Tests/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..477b28f --- /dev/null +++ b/AFNetworking-master/Tests/OS X Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/AFNetworking-master/Tests/Podfile b/AFNetworking-master/Tests/Podfile new file mode 100755 index 0000000..ac5cca0 --- /dev/null +++ b/AFNetworking-master/Tests/Podfile @@ -0,0 +1,23 @@ +source 'https://github.com/CocoaPods/Specs' + +xcodeproj 'AFNetworking Tests' +workspace '../AFNetworking' +inhibit_all_warnings! + +def import_pods + pod 'OCMock', '~> 2.1.1' + pod 'Expecta', '~> 0.2.1' + pod 'AFNetworking', :path => '../' +end + +target :ios do + platform :ios, '7.0' + link_with 'iOS Tests' + import_pods +end + +target :osx do + platform :osx, '10.9' + link_with 'OS X Tests' + import_pods +end diff --git a/AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer b/AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer new file mode 100755 index 0000000000000000000000000000000000000000..5cbf610fe652c33dab0c2f549e601ea2beb2133e GIT binary patch literal 1321 zcmXqLVpTP0V&PrD%*4pVB*5L(@Y3#O{b8vMhc`%ceT_8WW#iOp^Jx3d%gD&e%3zRY z$Zf#M#vIDRCd?EXY$$3V4B~JJ^SETDXF8`Al_+@TB^yc_h=YW=g$2sX%k@%#QprFm zz2y8{LsbK1kQB493|xmtW_pH#V{vh5QDR<<3ziM!u8p+Ps?OPR7gikGq)G; zu1Hh4nD@AP(YYhJv%7-2_vf%4$Yg9iu|>8!dzn<;s*Cf^Hb#clEK6`@W@tI)bo`mv{s z@V@J9MiGG(Wmz#FrGKW~%VEjeP$jB+xU%kQn(=&%S*Poa1>(;qMQ)z2`gY2%2W+|R ztao^L92DzusX*q+g6bnoa6>Bm;VSNHF28t z1u!`@)+smLxi{yZyT z{ubz;_molL%Du{&9?jpuF(AvwBE}-}?$4=%MRspl&2!f53%B@}Cs3s243QRO0mfhx zA`Y6^VUfWHGM=B2@jnX-GZX6qh;mhsayAZaHef(23?dA)7HBL` zYg5T6DJihh*H13WF-A$A`pJpLy6Hw1dO#UWwI;aLI)SWEV6ir^G%#o5Olb39Z2OzT z$Y`KtpaF9T6Qh_6$lhY0#pu~W-#H-IpcJWYWvnUH{=|*R>~$7rQ>n*uU3uy=Ci?faV9? z8{daWojCmG-d9!bCtsRY-{sh_WxG$+H&Z1GTe0o!mM(|)C^uZsmr(D0A#M|Ed{+Ml LSE!%Gvt}Lu*zU_* literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer b/AFNetworking-master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer new file mode 100755 index 0000000000000000000000000000000000000000..683d5ff30ac23b7f8ef3ceacf01f82f08c278102 GIT binary patch literal 1628 zcmbtUdr*{B6u)=B-DLrRg%$9DumUnXl)VdxMv5$pK%&MY5H%LJj|D#6SG!9L$T+z= zOF4kSG%3W;PD+v^HX@>wfPzM*(rZi0d_)g5Lujl-@zJ>=j@I}`(>HS;=XZYR+~0kC zhggNV#41RzGd#@WiCywNmock-Ykj{Qb}&_oo+WNV=Wtu9?WP;X0s$ggxhruNGTD5g zgqNKq_a+i*xJV`?aYdX`W3ot})3fra#FxUZ5^-s1X=DMoSa3zM2Aw>Dgi#kG349ch z$`ut$6=rjZNv&r!(#1K_OoPE9RVs+TuN#?9Vn~!ciomzZ*DWdv%xG$WNech3npq@h zT#et;)F>5mqKOp;K7J5bfEX+GK!CgOtQeynwM&>dKy@!>UWRDYe=KlF-R}WYNWLlZ7T1^83TfLdxsEuIbY~Z&$S* zURc|^a=j{6dnD^KB#Md`7vzd1T>qr&jfolPmLTbR@IZOMP?cwwSIZ6WKm5w&9G<@G zm%Jkl+6~T4mot-=h~t8Odb@-9prx^W^*fHV*1D>J1D@f#=S`_@?>%((MPb$G{h+S7 zDn~{9hE49ZZwa>dwFUh6iRRk->+|fhPu*GYt#0Vl?KEZ83CE#kwO?C8N2u4u&e8mP zU$vbWUfAxRR^hj_KDKG$wcmCXt7cp*(yPXJ3`Tf|m3Nz1d4CaiIMNv&7~kjf;ZfP( zls=}2lyAjdV01z|Aaq@0OU1UkTFf9G06R&XP!u7AH|E5{K9R*1i!n|n`{(PCna$cc ztkFEjq%j)IoW)=&1F8<<3m!$&Y&rf`oQV`jkIIk~l^`?Hz-T~)&|6S3;sB8%C7>p- zIlwu@A~nn@j|HY47}R5dXo^z48ayn_jew|uLFbQWrB)Ke6hWKFO;<@rvIl+EgB*HP z03%gF`I*pbK_v(Iioi~X%v2NAtpLOXehtz=(*r6+r4Q7z&`TkX0}s_WK3Aicz@q4Q zJk?0oq8aI0bPc*U6YPNYeMcLh>!0zl6cX3l+c?M5g`mbj7ZGH z$z#k9B_Sku!Y0@@<>5UVShMkoGC($NrKtk=8!O4i%_PAdZ(m@Gd&p)@+UO_PvWcIQ zR*FZ3VsQ>F6G}xS@c*45=D%hLpn`(3U+J{nI_^5vjq`-WCkU; z^L_Y}(|rYoYm%I?#lf35p?u^-WH>THC$VJA%d7VdBw{-1r zMPt*v?=r2qYmfH_*Qcf=%l+$y+w+&l^uN&~KRUW^v+eUny!+yo9N|FRRrkHyEO}>M zZb-D`U#M1AT)3J&#G#XdOXX^H^cPc?-4b25KXZK6+=CIvJlf9x-h9wK_*h72by?}3 zvXK=ZRya9+xN~|HS+T(;PB||RICJOS-X2ns7rgt*t-bkcExiNl_9vg6*&XJnQF(up rxa4w_VduVe8Jlvu7wP)PzGG&dTHrk&& ztLnL}Q0ws3DJJQQxMViOXD)Ntcx3yg{tGjftaOaDx_oEKHJjTd7E8R&_^LL2_gWe( zWby8^XKvxdy5w!Em&G4m((=PUDRAG9qi=3oOnS`rlw%^#5e>)C->0KGMe7P*nC|y2 z;KS3U1MC5c*hY*|CU8utq&? zd&l;QPp7z6SghtsIkZ15c52JPg{pGxu~Grt3PNWbcjs{jTI}#X&BV;ez_>WsAklyi z7{#*ujEw(TSb)i@&43@o7Y6ZJ4VZzHfh)yU1V#fRgNzj0^gGw*%(v-CW8(-{yshZ|Lo0pNehH&82Z8W| zU7xFN3a0j%{+jp4b?dyFK8D^qCcbdi>Dyd!?)Ky0%ED_;6{j%X3T>aIlJc!9?aaM7 z=4V%!Y|Nakd}3aOl6Haf<4||QM9KFNM_cv%48AQe6jMI&{86fy@#+0i(hF>VoQmr< z>`vh5)a7A|3EF<-C)bRNqVe;E_SKjrTkLgNQvXCvo9oE*Ox~A0j}8cg?>JE=G%@s( zN9K(^T1?UWE>{!`Z-3cUpcXqJVcs5ZaZdd$r{$b8PO_^XycF~OmEz6}p*c2l_Rss% i5HmaZ>>Kx0s_N+r%s(?U)rMSO`QxRY@Z$0p@?HQubYDLJ literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/AddTrust_External_CA_Root.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/AddTrust_External_CA_Root.cer new file mode 100755 index 0000000000000000000000000000000000000000..8a99c54a99fbe7d188e8349044bbf835338815b0 GIT binary patch literal 1082 zcmXqLVlgvlVwPLL%*4pV#K>sC%f_kI=F#?@mywZ`mBAq2klTQhjX9KsO_(Xz)lkGh z2*lwM=5|a;2`MTqE>UoFGE_5A0f}-8%fdxnD@sy}@)C0tLP7!*{8CHG^NX?#l?)U> z>X?NkG1WOcDg@={ml(*2^BNc!m>L@x8kkrZTSSTT8XjN?rvBY=YQMRKuAJRO$F&7v$3OVnzc89ta_Yo{keA2e z`77qma!f!mNNh*Jt^yXWhK4aLSy*%>fBq$A#xwu(vU-c)21|O=7}o zpAG)XtF8Q7ZrndN|6ykS?(0t1vt6DXU;8fCF}^6Oki&d)W$Kd11yjtwGwAaknpAY_ zf<@77krl2-Vzp|wZ@G5l-I}w)F56FP-*skC{gt>gGb=(_aQkxO{;<->uV*!{yKU#v zPTh9dDPMHcj_TjoB)8i0+;|888*y*(5iaqn(`z5X>60`I?kALv!$}}rd+fLyRuno|Argo zyVp48xF<9RZun_r`~1&0HR0n8VoUc&{b@g6QQ4_D>yZyTSDWdcPxk_kT$;B1PMzPo zg1<7BuX&gPMRfc2iaj`Z->vky%Gx(yoVK)1E)YoHHJ8oQOX9M2)tNx2g;mKHpY2|F zRQr(GK4IQxdz0%btCw@~I;_sR+uwEg+qWJmC)U6#u3zUbPg2YfRdBYM`MhSY%8iv1 z#fv-a!=w!@B(@at&pLa8Z(g6C^uwMR&8OuJKf3rFV=4A5OW;5LW3PBaw%*G#K73KL eD)|+-^sdfJR+9^zH04HUoFGE_5A0f}-8%fdxnD@sy}@)C0t zLP7!*{8CHG^NX?#l?)U>>X?NkG1WOcDg@={ml(*2^BNc!m>L@x8kkrZTSSTT8Xr?e)pb%`8bxG1NBDgg8$LDi;*&sNkGhRFavNnVeXXnV+ZNSXz>i zUzAx=Y0$)k5>||?49rbT{0u;GE~X|XMuv$mLMC0}3fs7bSLN=}^DgNnGqueZ*D4n< z6z&PWf8>{zP``J*K-k{-1x4Ev>rZ;~i!Zl*yn!Y0-G9O9$G^1Mas9H3`8oNSN!3k} z?B{bfw=QU^DqCMT;rg4uyuaq;{JOuP>5E9+&wWRh>HF8utl#=4-MMHl55u+2*V#Ik z-}cXt5m{aL^l{#w8!MhnQn}@vowOtL@2i7*a<+AU=IfpHWOh#G%pVmV2Ci4vKIFA= zP55IpEl_<=`r%W0+p=G|9Y3zHV55BMJr9muOZ--TYIZYkdHv!{qla_4Uy;`An7uyI z8eK6;)mv82xcTluVDn*4H@{rFnZKrr->NYVceLpZe9OHpX1z|b)cx=i_IqB&9+|z~ zb>^eRQ7T(@tqik0pTFwAXT-h_EB=4kvG%3;?_E2-a9jO+;p`;Wd86gD@W-3GA9g0} z=+OvUBO*J8>v`ep^L%%0S58~#vDfDN`mMZ5J_iIF--KCzyS(U8^!80GNaN+QxRXU2R+|OyuVRJ3p-z1^F zk&nQT$}{_BWZ$b06!4^&QvNEyh26!5W#v54$m zU&mzoYuQJemcF&`EM~m9X=HQ-oQP%l85#exumE#yn*l#axiE;&YQPMn3#pvFxko}c zOOHQR=ZkHrGQ%Gu64I;-<~_|vo9`t L|Is>Mz#<<2E=x9y literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/COMODO_RSA_Domain_Validation_Secure_Server_CA.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/COMODO_RSA_Domain_Validation_Secure_Server_CA.cer new file mode 100755 index 0000000000000000000000000000000000000000..7d7e8f271e43b37257755ed76258f83533d2fc98 GIT binary patch literal 1548 zcmXqLV&gDqV*apznTe5!NkCgK@72vxvmBAGyxWUwde{wk**LY@JlekVGBWb8G8iCn^}^YVyJDP36f(LR)Wd}1v@G@rxulDre!84 zmSpDVDL9svWaJlRmQ)(ZiSrto7#JBE8Gu2QIIoct%l>tM=+0mehQ3*LT8Ce;an;7{SfZ|+C zO^l2TeTSGNA1;Vo^4h|*SLZL|h0C4?QjT*cvAT*`typk?hpArn%tZKZm_Od`*m7q{&aV)n$~Wm>Ajm<9!v|rP#}>ot^b`a`{cO`cb&R;w)*7}tyvn1 z6Mge1`KvDdRAqWs?T*{h3u_`xd;a@PbPlkOoGh0UsQ4~IWc9z&fC@XG4Ki)Qzp`iS zd0;(7t~KZm^JEo?ywmD|uFneYsX8y=edx9H?Y6oTXLH}_$*LE}-f=Z(SoL_5Blr5f zF73B=K9!zZzwT*k(^4j8Mh3>kO^m6)5J@zU2Zph%GK++PScAy!^>s|Pzm|QpY3W=0 z&SJ)!n?^=g3}itH_*lePL?*1yvYHabePhBap|Iln&ReWBZaoL5JXwB5#{VoVz?9u) zAOun_4B~SbumLG1Mh1uxsw`p#B5WMmY>cd|?97aC7L$QANQ(lCh=Gs+8ygFd$zZ_2 z#+Kg5!^p&F-~*DBXK^)fHgH^EzreQ5I-{hdz)D{~xhO|3IX^c)B|kY4#L$PN5@2FR zNz3r0tOwL!PzbY@k&z|UAlbkg#y4PU(}x>eg2Q0Pl$4O7(&7?lN1$OP1}bpPjBOH7 z&H2g21t_|alOix&>YDMx+oW3Enqy18ignT4uqBKyHLAs>l?!)62EY2D)#s1!8 zy%OuLo^b8Ag>_ERqA5R|r0&1XXX|l2#Ky4d$%{KTw>~Vcc=Jv9&c(YqeNz2PUxn06 z+kW_8XkV{q+@F-)=k4}Rd!2c9{{xSYNlgMzdECN38Q;2aBKhqx`6;Z^yrd>x{QmlU zf6zK!j+=HX76iUL*j{q={z9+*dKSQ|d&3)hX>v9@we zoI;w^(w)n;S|0p5!}FgsLtM84&_yXI1PlgS;nsZ2K} z{M3DAepM>rLb}5B8&2G=>zgv}-Az+5pP)HK(oIrzN5l2gSK2hPTnf~blUB}e%iq6i qLcyi5^45y?uT)oxp9?7JVX#{D_;#|%{2y$EjE|ZWuKdg2yAc4zK1JmK literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_0.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_0.cer new file mode 100755 index 0000000000000000000000000000000000000000..11a1b0e8c91b4d8d3986f62558f46c105fbd03af GIT binary patch literal 1364 zcmXqLVhu28VzF4j%*4pVB*?I6?N>(mdn-7PUN3ShSX~lsz{|#|)#lOmotKf3o0Y+! zae^VY0Vf-CC<~h~le?3lw1Fgu!yzo>UX+?xl3JwTo0ylJky;F78VVTjfh5_5*@F{v z((;Q^45bVtKq6eig3kWF{x1Fs&W;K`nYo!IsVRnL1|}dmW?@~ZTu`v1f=hmGVrHH~ zSYl3QN@7W7ex5>bYI12&Dv&BF1KQ^7XdoxfYiMd<2-FV-Q9!O4h-+kQYH4a2We{zs zXdn+VnOj%_YMgU^UP)1Y4$N4f<#Glx5GA6n#l@+4C7Fpi!NEQX;h8xp$%#ORiy4T3 z9Vf!8rI%4sQjnCHrUXAa+iau4eDPxwpG~xt+_1girhz;IE|ex;WySdPp#zO%kbpn7k&OsK??Ue$;wX-G?fCz$o0f?( z9ArDwy!>^E>LbBD3|uDz_gT!Dc&4xG`~L|0?XON)ggusF-LgefsV)7t$Brcy%}mUU z42+AL7_S3EX9MGR++S9R&E+|##GK9<*R>%O8#ovYb~S}@BByP)0$b4 z5%bitQ+7DIr(c^pZ&%rJU0a3>?$;J4%C6Qfii_gj7`w69yLV=HtDx4k2`_s7C~G&y zhqCET)MT&^w(AQlO1ii!Ng`M==c8zd`&MP)%e$_}Z+Y>3|Kyf(!Jb!5HMWPmWp>6+ z`m3j-&$^q1=SoM{PLI7ahC*{-B2oC*Pu^_vTMtEpglU xsC?VJiuWt5rukQuA2pu6;?uddQ^Bt}e%yN%c=}A~zFu!ruaaqZ%kCL?0071Q*jE4m literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_1.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_1.cer new file mode 100755 index 0000000000000000000000000000000000000000..7d7e8f271e43b37257755ed76258f83533d2fc98 GIT binary patch literal 1548 zcmXqLV&gDqV*apznTe5!NkCgK@72vxvmBAGyxWUwde{wk**LY@JlekVGBWb8G8iCn^}^YVyJDP36f(LR)Wd}1v@G@rxulDre!84 zmSpDVDL9svWaJlRmQ)(ZiSrto7#JBE8Gu2QIIoct%l>tM=+0mehQ3*LT8Ce;an;7{SfZ|+C zO^l2TeTSGNA1;Vo^4h|*SLZL|h0C4?QjT*cvAT*`typk?hpArn%tZKZm_Od`*m7q{&aV)n$~Wm>Ajm<9!v|rP#}>ot^b`a`{cO`cb&R;w)*7}tyvn1 z6Mge1`KvDdRAqWs?T*{h3u_`xd;a@PbPlkOoGh0UsQ4~IWc9z&fC@XG4Ki)Qzp`iS zd0;(7t~KZm^JEo?ywmD|uFneYsX8y=edx9H?Y6oTXLH}_$*LE}-f=Z(SoL_5Blr5f zF73B=K9!zZzwT*k(^4j8Mh3>kO^m6)5J@zU2Zph%GK++PScAy!^>s|Pzm|QpY3W=0 z&SJ)!n?^=g3}itH_*lePL?*1yvYHabePhBap|Iln&ReWBZaoL5JXwB5#{VoVz?9u) zAOun_4B~SbumLG1Mh1uxsw`p#B5WMmY>cd|?97aC7L$QANQ(lCh=Gs+8ygFd$zZ_2 z#+Kg5!^p&F-~*DBXK^)fHgH^EzreQ5I-{hdz)D{~xhO|3IX^c)B|kY4#L$PN5@2FR zNz3r0tOwL!PzbY@k&z|UAlbkg#y4PU(}x>eg2Q0Pl$4O7(&7?lN1$OP1}bpPjBOH7 z&H2g21t_|alOix&>YDMx+oW3Enqy18ignT4uqBKyHLAs>l?!)62EY2D)#s1!8 zy%OuLo^b8Ag>_ERqA5R|r0&1XXX|l2#Ky4d$%{KTw>~Vcc=Jv9&c(YqeNz2PUxn06 z+kW_8XkV{q+@F-)=k4}Rd!2c9{{xSYNlgMzdECN38Q;2aBKhqx`6;Z^yrd>x{QmlU zf6zK!j+=HX76iUL*j{q={z9+*dKSQ|d&3)hX>v9@we zoI;w^(w)n;S|0p5!}FgsLtM84&_yXI1PlgS;nsZ2K} z{M3DAepM>rLb}5B8&2G=>zgv}-Az+5pP)HK(oIrzN5l2gSK2hPTnf~blUB}e%iq6i qLcyi5^45y?uT)oxp9?7JVX#{D_;#|%{2y$EjE|ZWuKdg2yAc4zK1JmK literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_2.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_2.cer new file mode 100755 index 0000000000000000000000000000000000000000..ad75f0fc5419119a8f36aba983d42c13c6b18c82 GIT binary patch literal 1400 zcmXqLVl6RfVu@M6%*4pVB%q%5F6_1E=f2g~3l{xpxu;~n%f_kI=F#?@mywZ&mBAq2 zklTQhjX9KsO_(Xz)lkGh2*lwM=5|a;2`MTqE>UoFGE_5A0f}-8%fdxnD@sy}@)C0t zLP7!*{8CHG^NX?#l?)U>>X?NkG1WOcDg@={ml(*2^BNc!m>L@x8kkrZTSSTT8Xr?e)pb%`8bxG1NBDgg8$LDi;*&sNkGhRFavNnVeXXnV+ZNSXz>i zUzAx=Y0$)k5>||?49rbT{0u;GE~X|XMuv$mLMC0}3fs7bSLN=}^DgNnGqueZ*D4n< z6z&PWf8>{zP``J*K-k{-1x4Ev>rZ;~i!Zl*yn!Y0-G9O9$G^1Mas9H3`8oNSN!3k} z?B{bfw=QU^DqCMT;rg4uyuaq;{JOuP>5E9+&wWRh>HF8utl#=4-MMHl55u+2*V#Ik z-}cXt5m{aL^l{#w8!MhnQn}@vowOtL@2i7*a<+AU=IfpHWOh#G%pVmV2Ci4vKIFA= zP55IpEl_<=`r%W0+p=G|9Y3zHV55BMJr9muOZ--TYIZYkdHv!{qla_4Uy;`An7uyI z8eK6;)mv82xcTluVDn*4H@{rFnZKrr->NYVceLpZe9OHpX1z|b)cx=i_IqB&9+|z~ zb>^eRQ7T(@tqik0pTFwAXT-h_EB=4kvG%3;?_E2-a9jO+;p`;Wd86gD@W-3GA9g0} z=+OvUBO*J8>v`ep^L%%0S58~#vDfDN`mMZ5J_iIF--KCzyS(U8^!80GNaN+QxRXU2R+|OyuVRJ3p-z1^F zk&nQT$}{_BWZ$b06!4^&QvNEyh26!5W#v54$m zU&mzoYuQJemcF&`EM~m9X=HQ-oQP%l85#exumE#yn*l#axiE;&YQPMn3#pvFxko}c zOOHQR=ZkHrGQ%Gu64I;-<~_|vo9`t L|Is>Mz#<<2E=x9y literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_3.cer b/AFNetworking-master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_3.cer new file mode 100755 index 0000000000000000000000000000000000000000..8a99c54a99fbe7d188e8349044bbf835338815b0 GIT binary patch literal 1082 zcmXqLVlgvlVwPLL%*4pV#K>sC%f_kI=F#?@mywZ`mBAq2klTQhjX9KsO_(Xz)lkGh z2*lwM=5|a;2`MTqE>UoFGE_5A0f}-8%fdxnD@sy}@)C0tLP7!*{8CHG^NX?#l?)U> z>X?NkG1WOcDg@={ml(*2^BNc!m>L@x8kkrZTSSTT8XjN?rvBY=YQMRKuAJRO$F&7v$3OVnzc89ta_Yo{keA2e z`77qma!f!mNNh*Jt^yXWhK4aLSy*%>fBq$A#xwu(vU-c)21|O=7}o zpAG)XtF8Q7ZrndN|6ykS?(0t1vt6DXU;8fCF}^6Oki&d)W$Kd11yjtwGwAaknpAY_ zf<@77krl2-Vzp|wZ@G5l-I}w)F56FP-*skC{gt>gGb=(_aQkxO{;<->uV*!{yKU#v zPTh9dDPMHcj_TjoB)8i0+;|888*y*(5iaqn(`z5X>60`I?kALv!$}}rd+fLyRuno|Argo zyVp48xF<9RZun_r`~1&0HR0n8VoUc&{b@g6QQ4_D>yZyTSDWdcPxk_kT$;B1PMzPo zg1<7BuX&gPMRfc2iaj`Z->vky%Gx(yoVK)1E)YoHHJ8oQOX9M2)tNx2g;mKHpY2|F zRQr(GK4IQxdz0%btCw@~I;_sR+uwEg+qWJmC)U6#u3zUbPg2YfRdBYM`MhSY%8iv1 z#fv-a!=w!@B(@at&pLa8Z(g6C^uwMR&8OuJKf3rFV=4A5OW;5LW3PBaw%*G#K73KL eD)|+-^sdfJR+9^zH04H(mdn-7PUN3ShSX~lsz{|#|)#lOmotKf3o0Y+! zae^VY0Vf-CC<~h~le?3lw1Fgu!yzo>UX+?xl3JwTo0ylJky;F78VVTjfh5_5*@F{v z((;Q^45bVtKq6eig3kWF{x1Fs&W;K`nYo!IsVRnL1|}dmW?@~ZTu`v1f=hmGVrHH~ zSYl3QN@7W7ex5>bYI12&Dv&BF1KQ^7XdoxfYiMd<2-FV-Q9!O4h-+kQYH4a2We{zs zXdn+VnOj%_YMgU^UP)1Y4$N4f<#Glx5GA6n#l@+4C7Fpi!NEQX;h8xp$%#ORiy4T3 z9Vf!8rI%4sQjnCHrUXAa+iau4eDPxwpG~xt+_1girhz;IE|ex;WySdPp#zO%kbpn7k&OsK??Ue$;wX-G?fCz$o0f?( z9ArDwy!>^E>LbBD3|uDz_gT!Dc&4xG`~L|0?XON)ggusF-LgefsV)7t$Brcy%}mUU z42+AL7_S3EX9MGR++S9R&E+|##GK9<*R>%O8#ovYb~S}@BByP)0$b4 z5%bitQ+7DIr(c^pZ&%rJU0a3>?$;J4%C6Qfii_gj7`w69yLV=HtDx4k2`_s7C~G&y zhqCET)MT&^w(AQlO1ii!Ng`M==c8zd`&MP)%e$_}Z+Y>3|Kyf(!Jb!5HMWPmWp>6+ z`m3j-&$^q1=SoM{PLI7ahC*{-B2oC*Pu^_vTMtEpglU xsC?VJiuWt5rukQuA2pu6;?uddQ^Bt}e%yN%c=}A~zFu!ruaaqZ%kCL?0071Q*jE4m literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/SelfSigned/AltName.cer b/AFNetworking-master/Tests/Resources/SelfSigned/AltName.cer new file mode 100755 index 0000000000000000000000000000000000000000..3ba9d33760747d8ec96b035dd0ebe736832cbe31 GIT binary patch literal 766 zcmXqLV)|v!#Q10dGZP~d6CeUxR{z485vdw)TK)uSl9UE%^}`fch26`@xAJ|OL#HgJ-H(be>TqWs=uBRmwfot zUxUJ1qF=J&b3#SSTxWes_3~)A``z$&^RMj{Y0I+tUoo+$IP@HOU3j^I=Z8$)=KyXu zW7DFFUW3B7>dY+rUW(mJwa=^IS(r22ba<$IwC)LX*UwonauWF9_ zp0lbs%26qtaw{FXf>vGQwUSwut#UUj;pdwYwwuxc9skd55({BJqx;e!aGq{UOZ>F8 zB@cyH?bE;beQ%LBzvl&x?CWOzrD5i-p{3KdC@E}ck?OFPUn6m~A#nzaSKwRSqP5CF zZl;`n_r72gx;v9=L56QzyfqUuBLm}NM+18UK47rR@-s62XJKJxVs9`I1MyWsd>#WX zHV$nzMpjmKW<~>1khmZVp8-!3S6Y64Qeu%_a(*syAajEQnUNvuTJJl_*opPiO18aw zq}|5J^z~5Q@CDy8$#;!b{V z@i)_V-`wakI C5GTO^ literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/SelfSigned/NoDomains.cer b/AFNetworking-master/Tests/Resources/SelfSigned/NoDomains.cer new file mode 100755 index 0000000000000000000000000000000000000000..6b6cce65b21e82464a994fba6adf62f91033f9de GIT binary patch literal 747 zcmXqLVtQ`S#CU!IGZP~d6Cch)(a~+BasKOyt0xXl z-dT96N^bKTtv!yyUtYc|vAeJ_ru$`f{|imV=L)Pke@<0|d^-0vr1p97^7l7d<}7Eb zx3tlg^jH2+)g=~t|0#oxn#OjYf7~-e3NrL3vN=3YmAP@-y7!A=&>cMqMrP@rt#Nsx z#xuV9vFv*!-y`4mO!rlA26I%J^XbjYmc6nxR*%oW=y>qiYx&LX7gm?1AO4t>9s9I% zoz0;qHNP%6$Fpb(ihen?b~j`5t@*!>@cvn}Z|_Fnpxf~eW?C1Hy!;P7k85tNCYZ+)5@Bsr}mYKV5 z;`11Av2kd#F|x9VA$XW7w0mq(AHyKi2Rrvogz3O0Hs`KvLdZ(Dk6ZQ6~wg7P<$ l&U`IAmc;PtPVPiMXT~|ay+>B>sAE01`uZC?uH~n%0RVpbD^UOd literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Resources/SelfSigned/foobar.com.cer b/AFNetworking-master/Tests/Resources/SelfSigned/foobar.com.cer new file mode 100755 index 0000000000000000000000000000000000000000..a9ca08eacdf4a860b3968195a0029ee3f66a5faf GIT binary patch literal 747 zcmXqLVtQ`S#CU!IGZP~d6CYP(-PYdE{;!(t>LUMDyb!A~dNqwpaF*et zY0>(}lc#(re#`Y%(E7L5WM($!{{8Qnm>C%u7i$@481MlDUY4Jc@jnX-GZTA*ff$Id z3gYt^aItY{voW%=vNJOxhbA{TG#MF6uN{rBjGvgG*qHxvscT`w_4S-;cR!bx2`m(n zEm+0f&N{obB4i3Q5p zTN>^1rQ~CBIu?3tNN8m^|2b5C{+h=p^NnPWna(mf5%lPB`-}&gJ9F3t&aRuWeS3-G z-H=B2)n6a3INoG|k!;bn&{sudNlqEhmf6Cc>%TM{dDRPJGh{+Cye z%_Q2-gSgeG|T0nf|@GeD}@W4;@Pv lzx~K+m9W*`cV5*6;|0=u+y2>~Tm5-ef%^1nBfrZ*dH@)(EGYm0 literal 0 HcmV?d00001 diff --git a/AFNetworking-master/Tests/Schemes/OS X Tests.xcscheme b/AFNetworking-master/Tests/Schemes/OS X Tests.xcscheme new file mode 100755 index 0000000..ec0a6b6 --- /dev/null +++ b/AFNetworking-master/Tests/Schemes/OS X Tests.xcscheme @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AFNetworking-master/Tests/Schemes/iOS Tests.xcscheme b/AFNetworking-master/Tests/Schemes/iOS Tests.xcscheme new file mode 100755 index 0000000..a47cf54 --- /dev/null +++ b/AFNetworking-master/Tests/Schemes/iOS Tests.xcscheme @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPClientTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPClientTests.m new file mode 100755 index 0000000..425b8e6 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPClientTests.m @@ -0,0 +1,335 @@ +// AFHTTPClientTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" + +@interface AFHTTPClientTests : SenTestCase +@property (readwrite, nonatomic, strong) AFHTTPSessionManager *client; +@end + +@implementation AFHTTPClientTests + +- (void)setUp { + self.client = [AFHTTPSessionManager clientWithBaseURL:[NSURL URLWithString:AFNetworkingTestsBaseURLString]]; +} + +#pragma mark - + +- (void)testInitRaisesException { + expect(^{ (void)[[AFHTTPSessionManager alloc] init]; }).to.raiseAny(); +} + +- (void)testDefaultHeaders { + [self.client setDefaultHeader:@"x-some-key" value:@"SomeValue"]; + expect([self.client defaultValueForHeader:@"x-some-key"]).to.equal(@"SomeValue"); + + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + expect([request valueForHTTPHeaderField:@"x-some-key"]).to.equal(@"SomeValue"); + + expect(^{ [self.client setDefaultHeader:@"x-some-key" value:nil]; }).toNot.raise(nil); +} + +- (void)testReachabilityStatus { + [Expecta setAsynchronousTestTimeout:5.0]; + + expect(self.client.networkReachabilityStatus).to.equal(@(AFNetworkReachabilityStatusUnknown)); + + __block AFNetworkReachabilityStatus reachabilityStatus = self.client.networkReachabilityStatus; + + [self.client setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + reachabilityStatus = status; + }]; + + expect(reachabilityStatus).will.equal(@(AFNetworkReachabilityStatusReachableViaWiFi)); +} + +- (void)testJSONRequestOperationContruction { + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; + + expect([AFJSONRequestOperation canProcessRequest:request]).to.beTruthy(); + + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFHTTPRequestOperation class]); + + [self.client registerHTTPOperationClass:[AFJSONRequestOperation class]]; + operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFJSONRequestOperation class]); + + [self.client unregisterHTTPOperationClass:[AFJSONRequestOperation class]]; + operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFHTTPRequestOperation class]); +} + +- (void)testXMLRequestOperationContruction { + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + [request setValue:@"application/xml" forHTTPHeaderField:@"Accept"]; + + expect([AFXMLRequestOperation canProcessRequest:request]).to.beTruthy(); + + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFHTTPRequestOperation class]); + + [self.client registerHTTPOperationClass:[AFXMLRequestOperation class]]; + operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFXMLRequestOperation class]); +} + +- (void)testImageRequestOperationContruction { + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + [request setValue:@"image/png" forHTTPHeaderField:@"Accept"]; + + expect([AFImageRequestOperation canProcessRequest:request]).to.beTruthy(); + + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFHTTPRequestOperation class]); + + [self.client registerHTTPOperationClass:[AFImageRequestOperation class]]; + operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect([operation class]).to.equal([AFImageRequestOperation class]); +} + +- (void)testThatEnqueueBatchOfHTTPRequestOperationsFiresCompletionBlockAfterEveryRequestCompleted { + [Expecta setAsynchronousTestTimeout:5.0]; + + __block NSDate *firstCallbackTime = nil; + __block NSDate *secondCallbackTime = nil; + __block NSDate *batchCallbackTime = nil; + + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/" parameters:nil]; + AFHTTPRequestOperation *firstOperation = [self.client HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { + firstCallbackTime = [NSDate date]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + firstCallbackTime = [NSDate date]; + }]; + + AFHTTPRequestOperation *secondOperation = [self.client HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { + secondCallbackTime = [NSDate date]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + secondCallbackTime = [NSDate date]; + }]; + + [self.client enqueueBatchOfHTTPRequestOperations:@[ firstOperation, secondOperation ] progressBlock:nil completionBlock:^(NSArray *operations) { + batchCallbackTime = [NSDate date]; + }]; + + expect(self.client.operationQueue.operationCount).will.equal(0); + expect(firstCallbackTime).willNot.beNil(); + expect(secondCallbackTime).willNot.beNil(); + expect(batchCallbackTime).willNot.beNil(); + expect(batchCallbackTime).beGreaterThan(firstCallbackTime); + expect(batchCallbackTime).beGreaterThan(secondCallbackTime); +} + +- (void)testAuthorizationHeaderWithInvalidUsernamePassword { + [Expecta setAsynchronousTestTimeout:5.0]; + + __block NSHTTPURLResponse *response = nil; + [self.client getPath:@"/basic-auth/username/password" parameters:nil success:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + response = operation.response; + }]; + + expect(response.statusCode).will.equal(401); +} + +- (void)testAuthorizationHeaderWithValidUsernamePassword { + [Expecta setAsynchronousTestTimeout:5.0]; + + __block NSHTTPURLResponse *response = nil; + [self.client setAuthorizationHeaderWithUsername:@"username" password:@"password"]; + [self.client getPath:@"/basic-auth/username/password" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { + response = operation.response; + } failure:nil]; + + expect(response.statusCode).will.equal(200); +} + +- (void)testThatClientClearsAuthorizationHeader { + [self.client setAuthorizationHeaderWithUsername:@"username" password:@"password"]; + [self.client clearAuthorizationHeader]; + + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + expect([request valueForHTTPHeaderField:@"Authorization"]).to.beNil(); +} + +- (void)testThatClientUsesDefaultCredential { + NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceNone]; + [self.client setDefaultCredential:credential]; + + NSURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/basic-auth/username/password" parameters:nil]; + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + expect(operation.credential).will.equal(credential); +} + +- (void)testAFQueryStringFromParametersWithEncodingWithPlainDictionary { + NSString *query = AFQueryStringFromParametersWithEncoding(@{ @"key": @"value" }, NSUTF8StringEncoding); + expect(query).to.equal(@"key=value"); +} + +- (void)testAFQueryStringFromParametersWithEncodingWithComplexNestedParameters { + NSString *query = AFQueryStringFromParametersWithEncoding(@{ @"key1": @"value1", @"key2": @{ @"key": @[ @1, @"value" ] } }, NSUTF8StringEncoding); + expect(query).to.equal(@"key1=value1&key2[key][]=1&key2[key][]=value"); +} + +- (void)testThatAFQueryStringFromParametersWithEncodingAppliesPercentEscapes { + NSString *query = AFQueryStringFromParametersWithEncoding(@{ @"key1": @"ä" }, NSUTF8StringEncoding); + expect(query).to.equal([@"key1=ä" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]); +} + +- (void)testThatCancelAllHTTPOperationsWithMethodPathCancelsOnlyMatchingOperations { + [self.client registerHTTPOperationClass:[AFJSONRequestOperation class]]; + [self.client registerHTTPOperationClass:[AFImageRequestOperation class]]; + + NSMutableURLRequest *firstRequest = [self.client requestWithMethod:@"GET" path:@"/ip" parameters:nil]; + NSMutableURLRequest *secondRequest = [self.client requestWithMethod:@"GET" path:@"/path" parameters:nil]; + NSMutableURLRequest *thirdRequest = [self.client requestWithMethod:@"POST" path:@"/path" parameters:nil]; + + [self.client enqueueBatchOfHTTPRequestOperationsWithRequests:@[ firstRequest, secondRequest, thirdRequest ] progressBlock:nil completionBlock:nil]; + [self.client.operationQueue setSuspended:YES]; + + [self.client cancelAllHTTPOperationsWithMethod:@"GET" path:@"/path"]; + + NSUInteger numberOfCancelledOperations = [[self.client.operationQueue.operations indexesOfObjectsPassingTest:^BOOL(NSOperation *operation, NSUInteger idx, BOOL *stop) { + return [operation isCancelled]; + }] count]; + expect(numberOfCancelledOperations).to.equal(1); +} + +- (void)testThatTheDefaultStringEncodingIsUTF8 { + expect(self.client.stringEncoding).to.equal(NSUTF8StringEncoding); +} + +- (void)testConstructingPOSTRequestWithParametersInFormURLParameterEncoding { + self.client.parameterEncoding = AFFormURLParameterEncoding; + + NSMutableURLRequest *request = [self.client requestWithMethod:@"POST" path:@"/post" parameters:@{ @"key": @"value" }]; + NSString *requestBody = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]; + expect(requestBody).to.equal(@"key=value"); +} + +- (void)testConstructingPOSTRequestWithParametersInJSONParameterEncoding { + self.client.parameterEncoding = AFJSONParameterEncoding; + + NSMutableURLRequest *request = [self.client requestWithMethod:@"POST" path:@"/post" parameters:@{ @"key": @"value" }]; + NSString *requestBody = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]; + expect(requestBody).to.equal(@"{\"key\":\"value\"}"); +} + +- (void)testConstructingPOSTRequestWithParametersInPropertyListParameterEncoding { + self.client.parameterEncoding = AFPropertyListParameterEncoding; + + NSMutableURLRequest *request = [self.client requestWithMethod:@"POST" path:@"/post" parameters:@{ @"key": @"value" }]; + NSString *requestBody = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]; + expect(requestBody).to.equal(@"\n\n\n\n key\n value\n\n\n"); +} + +- (void)testPostWithParameters { + __block id blockResponseObject = nil; + [self.client postPath:@"/post" parameters:@{ @"key": @"value" } success:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:nil]; + + expect([self.client.operationQueue operationCount]).will.equal(0); + expect(blockResponseObject).notTo.beNil(); + expect(blockResponseObject).to.beKindOf([NSData class]); + + NSError *error = nil; + NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:blockResponseObject options:0 error:&error]; + expect([responseDictionary valueForKey:@"form"]).to.equal(@{ @"key": @"value" }); +} + +- (void)testThatEnqueueBatchOfHTTPRequestOperationsConstructsOperationsWithAppropriateRegisteredHTTPRequestOperationClasses { + [self.client registerHTTPOperationClass:[AFJSONRequestOperation class]]; + [self.client registerHTTPOperationClass:[AFImageRequestOperation class]]; + + NSMutableURLRequest *firstRequest = [self.client requestWithMethod:@"GET" path:@"/" parameters:nil]; + [firstRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"]; + + NSMutableURLRequest *secondRequest = [self.client requestWithMethod:@"GET" path:@"/" parameters:nil]; + [secondRequest setValue:@"image/png" forHTTPHeaderField:@"Accept"]; + + __block NSArray *operations = nil; + id mockClient = [OCMockObject partialMockForObject:self.client]; + void (^block)(NSInvocation *) = ^(NSInvocation *invocation) { + __unsafe_unretained id argument = nil; + [invocation getArgument:&argument atIndex:2]; + + operations = argument; + }; + [[[mockClient stub] andDo:block] enqueueBatchOfHTTPRequestOperations:[OCMArg any] progressBlock:nil completionBlock:nil]; + [mockClient enqueueBatchOfHTTPRequestOperationsWithRequests:@[ firstRequest, secondRequest ] progressBlock:nil completionBlock:nil]; + + expect(operations).notTo.beNil(); + expect(operations).to.haveCountOf(2); + + expect([[operations objectAtIndex:0] class]).to.equal([AFJSONRequestOperation class]); + expect([[operations objectAtIndex:1] class]).to.equal([AFImageRequestOperation class]); +} + +- (void)testThatEnqueueBatchOfHTTPRequestOperationsEnqueuesOperationsInTheCorrectOrder { + NSMutableURLRequest *request = [self.client requestWithMethod:@"GET" path:@"/" parameters:nil]; + AFHTTPRequestOperation *firstOperation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + AFHTTPRequestOperation *secondOperation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + + id mockClient = [OCMockObject partialMockForObject:self.client]; + id mockOperationQueue = [OCMockObject mockForClass:[NSOperationQueue class]]; + [[[mockClient stub] andReturn:mockOperationQueue] operationQueue]; + + __block NSArray *operations = nil; + [[[mockOperationQueue stub] andDo:^(NSInvocation *invocation) { + __unsafe_unretained id argument = nil; + [invocation getArgument:&argument atIndex:2]; + + operations = argument; + }] addOperations:OCMOCK_ANY waitUntilFinished:NO]; + + __block NSBlockOperation *batchedOperation = nil; + [[[mockOperationQueue stub] andDo:^(NSInvocation *invocation) { + __unsafe_unretained id argument = nil; + [invocation getArgument:&argument atIndex:2]; + + batchedOperation = argument; + }] addOperation:OCMOCK_ANY]; + [mockClient enqueueBatchOfHTTPRequestOperations:@[ firstOperation, secondOperation ] progressBlock:nil completionBlock:nil]; + + expect(operations).to.haveCountOf(2); + + expect([operations objectAtIndex:0]).to.equal(firstOperation); + expect([operations objectAtIndex:1]).to.equal(secondOperation); + + expect(batchedOperation).notTo.beNil(); + expect(batchedOperation).to.beKindOf([NSBlockOperation class]); +} + +- (void)testMultipartUploadDoesNotFailDueToStreamSentAnEventBeforeBeingOpenedError { + NSString *pathToImage = [[NSBundle bundleForClass:[AFHTTPSessionManager class]] pathForResource:@"Icon" ofType:@"png"]; + NSData *imageData = [NSData dataWithContentsOfFile:pathToImage]; + NSMutableURLRequest *request = [self.client multipartFormRequestWithMethod:@"POST" path:@"/post" parameters:@{ @"foo": @"bar" } constructingBodyWithBlock:^(id formData) { + [formData appendPartWithFileData:imageData name:@"icon[image]" fileName:@"icon.png" mimeType:@"image/png"]; + }]; + AFHTTPRequestOperation *operation = [self.client HTTPRequestOperationWithRequest:request success:nil failure:nil]; + + [self.client enqueueHTTPRequestOperation:operation]; + expect(operation.isFinished).will.beTruthy(); + expect(operation.error).notTo.equal(NSURLErrorTimedOut); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPRequestOperationTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPRequestOperationTests.m new file mode 100755 index 0000000..3820990 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFHTTPRequestOperationTests.m @@ -0,0 +1,240 @@ +// AFHTTPRequestOperationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" + +@interface AFHTTPRequestOperationTests : SenTestCase +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPRequestOperationTests + +- (void)setUp { + self.baseURL = [NSURL URLWithString:AFNetworkingTestsBaseURLString]; +} + +#pragma mark - + +- (void)testThatOperationInvokesSuccessCompletionBlockWithResponseObjectOnSuccess { + __block id blockResponseObject = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:nil]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockResponseObject).willNot.beNil(); +} + +- (void)testThatOperationInvokesFailureCompletionBlockWithErrorOnFailure { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).willNot.beNil(); +} + +- (void)testThatCancellationOfRequestOperationSetsError { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; + expect(operation.error).willNot.beNil(); + expect(operation.error.code).to.equal(NSURLErrorCancelled); +} + +- (void)testThatCancellationOfRequestOperationInvokesFailureCompletionBlock { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; + expect(operation.error).willNot.beNil(); + expect(blockError).willNot.beNil(); + expect(blockError.code).will.equal(NSURLErrorCancelled); +} + +- (void)testThat500StatusCodeInvokesFailureCompletionBlockWithErrorOnFailure { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/500" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).willNot.beNil(); +} + +- (void)testThatRedirectBlockIsCalledWhen302IsEncountered { + __block BOOL success; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/redirect/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:nil]; + [operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { + if(redirectResponse){ + success = YES; + } + + return request; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(success).will.beTruthy(); +} + +- (void)testThatRedirectBlockIsCalledMultipleTimesWhenMultiple302sAreEncountered { + [Expecta setAsynchronousTestTimeout:5.0]; + __block NSInteger numberOfRedirects = 0; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/redirect/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:nil]; + [operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { + if(redirectResponse){ + numberOfRedirects++; + } + + return request; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(numberOfRedirects).will.equal(5); +} + +#pragma mark - Pause + +- (void)testThatOperationCanBePaused { + [Expecta setAsynchronousTestTimeout:3.0]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + [operation cancel]; +} + +- (void)testThatPausedOperationCanBeResumed { + [Expecta setAsynchronousTestTimeout:3.0]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + + [operation resume]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; +} + +- (void)testThatPausedOperationCanBeCompleted { + [Expecta setAsynchronousTestTimeout:3.0]; + + __block id blockResponseObject = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:nil]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + + [operation resume]; + expect([operation isExecuting]).will.beTruthy(); + expect([operation isFinished]).will.beTruthy(); + expect(blockResponseObject).willNot.beNil(); +} + +#pragma mark - Response String Encoding + +- (void)testThatTextStringEncodingIsISOLatin1WhenNoCharsetParameterIsProvided { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/plain" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseStringEncoding).will.equal(NSISOLatin1StringEncoding); +} + +- (void)testThatTextStringEncodingIsShiftJISWhenShiftJISCharsetParameterIsProvided { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/plain;%20charset=%22Shift_JIS%22" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseStringEncoding).will.equal(NSShiftJISStringEncoding); +} + +- (void)testThatTextStringEncodingIsUTF8WhenInvalidCharsetParameterIsProvided { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/plain;%20charset=%22invalid%22" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseStringEncoding).will.equal(NSUTF8StringEncoding); +} + +- (void)testThatTextStringEncodingIsUTF8WhenUTF8CharsetParameterIsProvided { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/plain;%20charset=%22UTF-8%22" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseStringEncoding).will.equal(NSUTF8StringEncoding); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFImageRequestOperationTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFImageRequestOperationTests.m new file mode 100755 index 0000000..2b26be9 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFImageRequestOperationTests.m @@ -0,0 +1,155 @@ +// AFImageRequestOperationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" + +@interface AFImageRequestOperationTests : SenTestCase +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFImageRequestOperationTests + +- (void)setUp { + self.baseURL = [NSURL URLWithString:AFNetworkingTestsBaseURLString]; +} + +#pragma mark - + +- (void)testThatImageRequestOperationAcceptsTIFFContentType { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/tiff" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatImageRequestOperationAcceptsJPEGContentType { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/jpeg" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatImageRequestOperationAcceptsGIFContentType { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/gif" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatImageRequestOperationAcceptsPNGContentType { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/png" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatImageRequestOperationAcceptsIconContentTypes { + NSArray *acceptableIconContentTypes = @[@"image/ico", @"image/x-icon"]; + for (NSString *contentType in acceptableIconContentTypes) { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"/response-headers?Content-Type=%@", contentType] relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); + } +} + +- (void)testThatImageRequestOperationAcceptsBitmapContentTypes { + NSArray *acceptableBitmapContentTypes = @[@"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap"]; + for (NSString *contentType in acceptableBitmapContentTypes) { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"/response-headers?Content-Type=%@", contentType] relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); + } +} + +- (void)testThatImageRequestOperationDoesNotAcceptInvalidFormatTypes { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/invalid" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).willNot.beNil(); +} + +- (void)testThatImageResponseIsNotNilWhenRequestSucceeds { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/png" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseImage).willNot.beNil(); +} + +- (void)testThatImageResponseIsNilWhenRequestFails { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [[AFImageRequestOperation alloc] initWithRequest:request]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseImage).will.beNil(); +} + +- (void)testImageProcessingBlockIsRunOnSuccess { + __block BOOL imageProcessingBlockExecuted = NO; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=image/png" relativeToURL:self.baseURL]]; + AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) { + imageProcessingBlockExecuted = YES; + return image; + } success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { + return; + } failure:nil]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); + expect(imageProcessingBlockExecuted).will.beTruthy(); +} + +- (void)testImageProcessingBlockIsNotRunOnFailure { + __block UIImage *blockImage = nil; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + + AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) { + blockImage = [[UIImage alloc] init]; + return blockImage; + } success:nil failure:nil]; + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).willNot.beNil(); + expect(blockImage).will.beNil(); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFJSONRequestOperationTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFJSONRequestOperationTests.m new file mode 100755 index 0000000..e234299 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFJSONRequestOperationTests.m @@ -0,0 +1,98 @@ +// AFJSONRequestOperationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" + +@interface AFJSONRequestOperationTests : SenTestCase +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFJSONRequestOperationTests + +- (void)setUp { + self.baseURL = [NSURL URLWithString:AFNetworkingTestsBaseURLString]; +} + +- (void)testThatJSONRequestOperationAcceptsApplicationJSON { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=application/json" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatJSONRequestOperationAcceptsTextJSON { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/json" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatJSONRequestOperationAcceptsTextJavascript { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=text/javascript" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatJSONRequestOperationAcceptsCustomContentType { + [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"application/customjson"]]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=application/customjson" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).will.beNil(); +} + +- (void)testThatJSONRequestOperationDoesNotAcceptInvalidContentType { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=application/no-json" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.error).willNot.beNil(); +} + +- (void)testThatJSONResponseObjectIsNotNilWhenValidJSONIsReturned { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/response-headers?Content-Type=application/json" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseJSON).willNot.beNil(); +} + +- (void)testThatJSONResponseObjectIsNilWhenErrorOccurs { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(operation.responseJSON).will.beNil(); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.h b/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.h new file mode 100755 index 0000000..c9bc74d --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.h @@ -0,0 +1,37 @@ +// AFMockURLProtocol.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import "OCMock.h" + +@protocol AFMockURLProtocolProxy +- (id)stub; +- (id)expect; +- (id)reject; +@end + +@interface AFMockURLProtocol : NSURLProtocol + ++ (void)handleNextRequestForURL:(NSURL *)URL + usingBlock:(void (^)(AFMockURLProtocol * protocol))block; + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.m new file mode 100755 index 0000000..212e3cd --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFMockURLProtocol.m @@ -0,0 +1,106 @@ +// AFMockURLProtocol.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFMockURLProtocol.h" + +typedef void (^AFTestURLProtocolInitializationCallback)(AFMockURLProtocol *protocol); + +static volatile NSURL *_matchingURL = nil; +static volatile AFTestURLProtocolInitializationCallback _initializationCallback = nil; + +@implementation AFMockURLProtocol + ++ (void)load { + [NSURLProtocol registerClass:[AFMockURLProtocol class]]; +} + ++ (void)handleNextRequestForURL:(NSURL *)URL + usingBlock:(void (^)(AFMockURLProtocol * protocol))block; +{ + _matchingURL = URL; + _initializationCallback = block; +} + +#pragma mark - NSURLProtocol + ++ (BOOL)canInitWithRequest:(NSURLRequest *)request { + return [request.URL isEqual:_matchingURL] && _initializationCallback; +} + ++ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { + return request; +} + ++ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a + toRequest:(NSURLRequest *)b +{ + return NO; +} + +- (id)initWithRequest:(NSURLRequest *)request + cachedResponse:(NSCachedURLResponse *)cachedResponse + client:(id )client +{ + self = [super initWithRequest:request cachedResponse:cachedResponse client:client]; + if (!self) { + return nil; + } + + if (_initializationCallback) { + self = [OCMockObject partialMockForObject:self]; + + _initializationCallback(self); + } + + _initializationCallback = nil; + _matchingURL = nil; + + return self; +} + +- (void)startLoading {} + +- (void)stopLoading {} + +#pragma mark - NSURLAuthenticationChallengeSender + +- (void)cancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + [self doesNotRecognizeSelector:_cmd]; +} + +- (void)continueWithoutCredentialForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + [self doesNotRecognizeSelector:_cmd]; +} + +- (void)useCredential:(NSURLCredential *)credential +forAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + [self doesNotRecognizeSelector:_cmd]; +} + +- (void)performDefaultHandlingForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + [self doesNotRecognizeSelector:_cmd]; +} + +- (void)rejectProtectionSpaceAndContinueWithChallenge:(NSURLAuthenticationChallenge *)challenge { + [self doesNotRecognizeSelector:_cmd]; +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.h b/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.h new file mode 100755 index 0000000..7a612cf --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.h @@ -0,0 +1,33 @@ +// AFNetworkingTests.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import "AFNetworking.h" + +#define EXP_SHORTHAND YES +#import "Expecta.h" +#import "OCMock.h" + +extern NSString * const AFNetworkingTestsBaseURLString; + +@interface AFNetworkingTests : NSObject + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.m new file mode 100755 index 0000000..938893b --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFNetworkingTests.m @@ -0,0 +1,35 @@ +// AFNetworkingTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" +#import "AFHTTPRequestOperationLogger.h" + +NSString * const AFNetworkingTestsBaseURLString = @"http://httpbin.org/"; + +@implementation AFNetworkingTests + ++ (void)load { + if ([[[[[NSProcessInfo processInfo] environment] valueForKey:@"AFTestsLoggingEnabled"] uppercaseString] isEqualToString:@"YES"]) { + [[AFHTTPRequestOperationLogger sharedLogger] startLogging]; + } +} + +@end diff --git a/AFNetworking-master/Tests/Tests/1.0 Tests/AFURLConnectionOperationTests.m b/AFNetworking-master/Tests/Tests/1.0 Tests/AFURLConnectionOperationTests.m new file mode 100755 index 0000000..028d95f --- /dev/null +++ b/AFNetworking-master/Tests/Tests/1.0 Tests/AFURLConnectionOperationTests.m @@ -0,0 +1,304 @@ +// AFJSONRequestOperationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkingTests.h" +#import "AFURLConnectionOperation.h" +#import "AFMockURLProtocol.h" + +@interface AFURLConnectionOperationTests : SenTestCase +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFURLConnectionOperationTests + +- (void)setUp { + self.baseURL = [NSURL URLWithString:AFNetworkingTestsBaseURLString]; +} + +#pragma mark - + +- (void)testThatAFURLConnectionOperationInvokesWillSendRequestForAuthenticationChallengeBlock { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/path" relativeToURL:self.baseURL]]; + AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request]; + + __block BOOL willSendRequestForAuthenticationChallengeBlockInvoked = NO; + [operation setWillSendRequestForAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) { + willSendRequestForAuthenticationChallengeBlockInvoked = YES; + }]; + + [AFMockURLProtocol handleNextRequestForURL:request.URL usingBlock:^(AFMockURLProtocol * protocol) { + + void(^startOperation)(NSInvocation *invocation) = ^(NSInvocation *invocation) { + __unsafe_unretained AFMockURLProtocol *protocol = nil; + [invocation getArgument:&protocol atIndex:0]; + + NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:request.URL.host port:request.URL.port.integerValue protocol:request.URL.scheme realm:nil authenticationMethod:NSURLAuthenticationMethodDefault]; + NSURLAuthenticationChallenge *authenticationChallenge = [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:nil previousFailureCount:0 failureResponse:nil error:nil sender:protocol]; + [protocol.client URLProtocol:protocol didReceiveAuthenticationChallenge:authenticationChallenge]; + }; + [[[protocol stub] andDo:startOperation] startLoading]; + }]; + + [operation start]; + expect(willSendRequestForAuthenticationChallengeBlockInvoked).will.beTruthy(); + + [operation cancel]; +} + +- (void)testThatAFURLConnectionOperationTrustsPinnedCertificates { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/path" relativeToURL:self.baseURL]]; + AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request]; + operation.SSLPinningMode = AFSSLPinningModeCertificate; + + __block BOOL useCredentialInvoked = NO; + + NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:request.URL.host port:request.URL.port.integerValue protocol:request.URL.scheme realm:nil authenticationMethod:NSURLAuthenticationMethodServerTrust]; + + NSData *certificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"root_certificate" ofType:@"cer"]]; + NSParameterAssert(certificateData); + + SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData); + NSParameterAssert(certificate); + + SecCertificateRef allowedCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + OSStatus status = SecTrustCreateWithCertificates(certificates, policy, &trust); + NSAssert(status == errSecSuccess, @"SecTrustCreateWithCertificates error: %ld", (long int)status); + + SecTrustResultType result; + status = SecTrustEvaluate(trust, &result); + NSAssert(status == errSecSuccess, @"SecTrustEvaluate error: %ld", (long int)status); + + id mockedProtectionSpace = [OCMockObject partialMockForObject:protectionSpace]; + + [[[mockedProtectionSpace stub] andDo:^(NSInvocation *invocation) { + [invocation setReturnValue:(void *)&trust]; + }] serverTrust]; + + AFMockURLProtocol *protocol = [[AFMockURLProtocol alloc] initWithRequest:request cachedResponse:nil client:nil]; + id mockedProtocol = [OCMockObject partialMockForObject:protocol]; + + void(^useCredential)(NSInvocation *invocation) = ^(NSInvocation *invocation) { + useCredentialInvoked = YES; + }; + + [[[mockedProtocol stub] andDo:useCredential] useCredential:OCMOCK_ANY forAuthenticationChallenge:OCMOCK_ANY]; + + NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust]; + NSURLAuthenticationChallenge *authenticationChallenge = [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:0 failureResponse:nil error:nil sender:mockedProtocol]; + [protocol.client URLProtocol:mockedProtocol didReceiveAuthenticationChallenge:authenticationChallenge]; + + [operation connection:nil willSendRequestForAuthenticationChallenge:authenticationChallenge]; + + CFRelease(trust); + CFRelease(policy); + CFRelease(certificates); + CFRelease(certificate); + + expect(useCredentialInvoked).will.beTruthy(); +} + +- (void)testThatAFURLConnectionOperationTrustsPinnedPublicKeys { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/path" relativeToURL:self.baseURL]]; + AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request]; + operation.SSLPinningMode = AFSSLPinningModePublicKey; + + __block BOOL useCredentialInvoked = NO; + + NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:request.URL.host port:request.URL.port.integerValue protocol:request.URL.scheme realm:nil authenticationMethod:NSURLAuthenticationMethodServerTrust]; + + NSData *certificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"root_certificate" ofType:@"cer"]]; + NSParameterAssert(certificateData); + + SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData); + NSParameterAssert(certificate); + + SecCertificateRef allowedCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + OSStatus status = SecTrustCreateWithCertificates(certificates, policy, &trust); + NSAssert(status == errSecSuccess, @"SecTrustCreateWithCertificates error: %ld", (long int)status); + + SecTrustResultType result; + status = SecTrustEvaluate(trust, &result); + NSAssert(status == errSecSuccess, @"SecTrustEvaluate error: %ld", (long int)status); + + id mockedProtectionSpace = [OCMockObject partialMockForObject:protectionSpace]; + + [[[mockedProtectionSpace stub] andDo:^(NSInvocation *invocation) { + [invocation setReturnValue:(void *)&trust]; + }] serverTrust]; + + AFMockURLProtocol *protocol = [[AFMockURLProtocol alloc] initWithRequest:request cachedResponse:nil client:nil]; + id mockedProtocol = [OCMockObject partialMockForObject:protocol]; + + void(^useCredential)(NSInvocation *invocation) = ^(NSInvocation *invocation) { + useCredentialInvoked = YES; + }; + + [[[mockedProtocol stub] andDo:useCredential] useCredential:OCMOCK_ANY forAuthenticationChallenge:OCMOCK_ANY]; + + NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust]; + NSURLAuthenticationChallenge *authenticationChallenge = [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:0 failureResponse:nil error:nil sender:mockedProtocol]; + [protocol.client URLProtocol:mockedProtocol didReceiveAuthenticationChallenge:authenticationChallenge]; + + [operation connection:nil willSendRequestForAuthenticationChallenge:authenticationChallenge]; + + CFRelease(trust); + CFRelease(policy); + CFRelease(certificates); + CFRelease(certificate); + + expect(useCredentialInvoked).will.beTruthy(); +} + +- (void)testThatAFURLConnectionOperationTrustsPublicKeysOfDerivedCertificates { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/path" relativeToURL:self.baseURL]]; + AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request]; + operation.SSLPinningMode = AFSSLPinningModePublicKey; + + __block BOOL useCredentialInvoked = NO; + + NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:request.URL.host port:request.URL.port.integerValue protocol:request.URL.scheme realm:nil authenticationMethod:NSURLAuthenticationMethodServerTrust]; + + NSData *caCertificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"ca" ofType:@"cer"]]; + NSParameterAssert(caCertificateData); + + SecCertificateRef caCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCertificateData); + NSParameterAssert(caCertificate); + + NSData *hostCertificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"derived" ofType:@"cert"]]; + NSParameterAssert(hostCertificateData); + + SecCertificateRef hostCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCertificateData); + NSParameterAssert(hostCertificate); + + SecCertificateRef allowedCertificates[] = {caCertificate, hostCertificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 2, NULL); + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + OSStatus status = SecTrustCreateWithCertificates(certificates, policy, &trust); + NSAssert(status == errSecSuccess, @"SecTrustCreateWithCertificates error: %ld", (long int)status); + + SecTrustResultType result; + status = SecTrustEvaluate(trust, &result); + NSAssert(status == errSecSuccess, @"SecTrustEvaluate error: %ld", (long int)status); + + id mockedProtectionSpace = [OCMockObject partialMockForObject:protectionSpace]; + + [[[mockedProtectionSpace stub] andDo:^(NSInvocation *invocation) { + [invocation setReturnValue:(void *)&trust]; + }] serverTrust]; + + AFMockURLProtocol *protocol = [[AFMockURLProtocol alloc] initWithRequest:request cachedResponse:nil client:nil]; + id mockedProtocol = [OCMockObject partialMockForObject:protocol]; + + void(^useCredential)(NSInvocation *invocation) = ^(NSInvocation *invocation) { + useCredentialInvoked = YES; + }; + + [[[mockedProtocol stub] andDo:useCredential] useCredential:OCMOCK_ANY forAuthenticationChallenge:OCMOCK_ANY]; + + NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust]; + NSURLAuthenticationChallenge *authenticationChallenge = [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:0 failureResponse:nil error:nil sender:mockedProtocol]; + [protocol.client URLProtocol:mockedProtocol didReceiveAuthenticationChallenge:authenticationChallenge]; + + [operation connection:nil willSendRequestForAuthenticationChallenge:authenticationChallenge]; + + CFRelease(trust); + CFRelease(policy); + CFRelease(certificates); + CFRelease(caCertificate); + CFRelease(hostCertificate); + + expect(useCredentialInvoked).will.beTruthy(); +} + +- (void)testThatAFURLConnectionOperationTrustsDerivedCertificates { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/path" relativeToURL:self.baseURL]]; + AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request]; + operation.SSLPinningMode = AFSSLPinningModeCertificate; + + __block BOOL useCredentialInvoked = NO; + + NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:request.URL.host port:request.URL.port.integerValue protocol:request.URL.scheme realm:nil authenticationMethod:NSURLAuthenticationMethodServerTrust]; + + NSData *caCertificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"ca" ofType:@"cer"]]; + NSParameterAssert(caCertificateData); + + SecCertificateRef caCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCertificateData); + NSParameterAssert(caCertificate); + + NSData *hostCertificateData = [NSData dataWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"derived" ofType:@"cert"]]; + NSParameterAssert(hostCertificateData); + + SecCertificateRef hostCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCertificateData); + NSParameterAssert(hostCertificate); + + SecCertificateRef allowedCertificates[] = {caCertificate, hostCertificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 2, NULL); + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + OSStatus status = SecTrustCreateWithCertificates(certificates, policy, &trust); + NSAssert(status == errSecSuccess, @"SecTrustCreateWithCertificates error: %ld", (long int)status); + + SecTrustResultType result; + status = SecTrustEvaluate(trust, &result); + NSAssert(status == errSecSuccess, @"SecTrustEvaluate error: %ld", (long int)status); + + id mockedProtectionSpace = [OCMockObject partialMockForObject:protectionSpace]; + + [[[mockedProtectionSpace stub] andDo:^(NSInvocation *invocation) { + [invocation setReturnValue:(void *)&trust]; + }] serverTrust]; + + AFMockURLProtocol *protocol = [[AFMockURLProtocol alloc] initWithRequest:request cachedResponse:nil client:nil]; + id mockedProtocol = [OCMockObject partialMockForObject:protocol]; + + void(^useCredential)(NSInvocation *invocation) = ^(NSInvocation *invocation) { + useCredentialInvoked = YES; + }; + + [[[mockedProtocol stub] andDo:useCredential] useCredential:OCMOCK_ANY forAuthenticationChallenge:OCMOCK_ANY]; + + NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust]; + NSURLAuthenticationChallenge *authenticationChallenge = [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:protectionSpace proposedCredential:credential previousFailureCount:0 failureResponse:nil error:nil sender:mockedProtocol]; + [protocol.client URLProtocol:mockedProtocol didReceiveAuthenticationChallenge:authenticationChallenge]; + + [operation connection:nil willSendRequestForAuthenticationChallenge:authenticationChallenge]; + + CFRelease(trust); + CFRelease(policy); + CFRelease(certificates); + CFRelease(caCertificate); + CFRelease(hostCertificate); + + expect(useCredentialInvoked).will.beTruthy(); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFHTTPRequestOperationTests.m b/AFNetworking-master/Tests/Tests/AFHTTPRequestOperationTests.m new file mode 100755 index 0000000..d544000 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFHTTPRequestOperationTests.m @@ -0,0 +1,458 @@ +// AFHTTPRequestOperationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFHTTPRequestOperation.h" + +@interface AFHTTPRequestOperationTests : AFTestCase +@end + +@implementation AFHTTPRequestOperationTests + +// FLAKY: This test does not deterministically fail when the AFHTTPRequestOperation logic is incorrect. +// See comments inside for details. +// When this test does fail, most tests in this class will also fail, since the network thread is stalled. +// The tests should be better encapsulated - setUp and tearDown should reset the state of the network thread. +- (void)testPauseResumeStallsNetworkThread { + [Expecta setAsynchronousTestTimeout:5.0]; + + __block id blockResponseObject = nil; + __block id blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + // FLAKY: For this test to correctly fail, 'pause' must happen on the main thread before the network thread has run the logic of 'start'. + // The non-intrusive fix to this is to create fine grained control over the starting/stopping of the network thread, rather than having the network thread continually process events in the background. + + // Start, and then immediately pause the connection. + // The pause should correctly reset the state of the operation. + // This test fails when pause incorrectly resets the state of the operation. + [operation start]; + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + + // Resume the operation. + [operation resume]; + expect([operation isExecuting]).will.beTruthy(); + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); + + // The first operation completed, but the network thread is now in an infinite loop. + // Future requests should not work. + blockResponseObject = nil; + AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + // The network thread is stalled, so this operation could not succeed. + [operation2 start]; + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); +} + +- (void)testThatOperationInvokesSuccessCompletionBlockWithResponseObjectOnSuccess { + __block id blockResponseObject = nil; + __block id blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); +} + +- (void)testThatOperationInvokesSuccessCompletionBlockOn204 { + __block id blockResponseObject = nil; + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/204" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(blockResponseObject).will.equal([NSData data]); +} + +- (void)testThatOperationInvokesFailureCompletionBlockWithErrorOnFailure { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).willNot.beNil(); +} + +- (void)testThatCancellationOfRequestOperationSetsError { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; + expect(operation.error).willNot.beNil(); + expect(operation.error.code).to.equal(NSURLErrorCancelled); +} + +- (void)testThatCancellationOfRequestOperationInvokesFailureCompletionBlock { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; + expect(operation.error).willNot.beNil(); + expect(blockError).willNot.beNil(); + expect(blockError.code).will.equal(NSURLErrorCancelled); +} + +- (void)testThatCancellationOfRequestBeforeStartingRequestSetsError { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation cancel]; + [operation start]; + + expect([operation isCancelled]).will.beTruthy(); + expect([operation isFinished]).will.beTruthy(); + expect([operation isExecuting]).will.beFalsy(); + + expect(operation.error).willNot.beNil(); + expect(blockError).willNot.beNil(); + expect(blockError.code).will.equal(NSURLErrorCancelled); +} + +- (void)testThatCancellationOfRequestBeforeStartingRequestSetsErrorInvokesFailureCompletionBlock { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation cancel]; + [operation start]; + + expect(operation.error).willNot.beNil(); + expect(blockError).willNot.beNil(); + expect(blockError.code).will.equal(NSURLErrorCancelled); +} + +- (void)testThat500StatusCodeInvokesFailureCompletionBlockWithErrorOnFailure { + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/500" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).willNot.beNil(); +} + +- (void)testThatRedirectBlockIsCalledWhen302IsEncountered { + __block BOOL success; + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/redirect/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + [operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { + if(redirectResponse){ + success = YES; + } + + return request; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(success).will.beTruthy(); +} + +- (void)testThatRedirectBlockIsCalledMultipleTimesWhenMultiple302sAreEncountered { + [Expecta setAsynchronousTestTimeout:5.0]; + __block NSInteger numberOfRedirects = 0; + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/redirect/5" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + [operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) { + if(redirectResponse){ + numberOfRedirects++; + } + + return request; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(numberOfRedirects).will.equal(5); +} + +#pragma mark - Pause + +- (void)testThatOperationCanBePaused { + [Expecta setAsynchronousTestTimeout:3.0]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + [operation cancel]; +} + +- (void)testThatPausedOperationCanBeResumed { + [Expecta setAsynchronousTestTimeout:3.0]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + + [operation resume]; + expect([operation isExecuting]).will.beTruthy(); + + [operation cancel]; +} + +- (void)testThatPausedOperationCanBeCompleted { + [Expecta setAsynchronousTestTimeout:3.0]; + + __block id blockResponseObject = nil; + __block id blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isExecuting]).will.beTruthy(); + + [operation pause]; + expect([operation isPaused]).will.beTruthy(); + + [operation resume]; + expect([operation isExecuting]).will.beTruthy(); + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); +} + +- (void)testThatOperationPostsDidStartNotificationWhenStarted { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + __block BOOL notificationFound; + + id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidStartNotification object:nil queue:nil usingBlock:^(NSNotification *note) { + if([[[note object] request] isEqual:operation.request]){ + notificationFound = YES; + } + }]; + + [operation start]; + expect(notificationFound).will.beTruthy(); + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; +} + +- (void)testThatOperationPostsDidFinishNotificationWhenFinished { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + __block BOOL notificationFound; + + id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:nil queue:nil usingBlock:^(NSNotification *note) { + if([[[note object] request] isEqual:operation.request]){ + notificationFound = YES; + } + }]; + + [operation start]; + expect(notificationFound).will.beTruthy(); + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; +} + +-(void)testThatCompletionBlockForBatchRequestsIsFiredAfterAllOperationCompletionBlocks { + __block BOOL firstBlock = NO; + __block BOOL secondBlock = NO; + __block id firstBlockError = nil; + __block id secondBlockError = nil; + + NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation1 = [[AFHTTPRequestOperation alloc] initWithRequest:request1]; + [operation1 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + firstBlock = YES; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + firstBlockError = error; + }]; + [operation1 setResponseSerializer:[AFHTTPResponseSerializer serializer]]; + + NSURLRequest *request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/delay/1" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation2 = [[AFHTTPRequestOperation alloc] initWithRequest:request2]; + [operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + secondBlock = YES; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + secondBlockError = error; + }]; + [operation2 setResponseSerializer:[AFHTTPResponseSerializer serializer]]; + + __block BOOL completionBlockFiredAfterOtherBlocks = NO; + NSArray *batchRequests = [AFURLConnectionOperation batchOfRequestOperations:@[operation1, operation2] progressBlock:nil completionBlock:^(NSArray *operations) { + if (firstBlock && secondBlock) { + completionBlockFiredAfterOtherBlocks = YES; + } + }]; + + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + [queue addOperations:batchRequests waitUntilFinished:NO]; + + expect(firstBlockError).will.beNil(); + expect(secondBlockError).will.beNil(); + expect(completionBlockFiredAfterOtherBlocks).will.beTruthy(); +} + +- (void)testThatOperationInvokesFailureCompletionBlockWithErrorOnWritingStreamFailure { + __block NSError *blockError; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + NSError *streamError = [NSError errorWithDomain:NSStreamSocketSSLErrorDomain code:0 userInfo:nil]; + + [operation setOutputStream:({ + id mockStream = [OCMockObject mockForClass:[NSOutputStream class]]; + [[[mockStream stub] andReturn:streamError] streamError]; + BOOL no = NO; + [[[mockStream stub] andReturnValue:OCMOCK_VALUE(no)] hasSpaceAvailable]; + + // "Note that currently partial mocks cannot be created for instances of toll-free bridged classes". Thus, we have to fully mock it + [[mockStream stub] scheduleInRunLoop:OCMOCK_ANY forMode:OCMOCK_ANY]; + [[mockStream stub] open]; + [[mockStream stub] close]; + + mockStream; + })]; + + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.equal(streamError); +} + +- (void)testThatOperationInvokesSuccessCompletionBlockForHTTPSRequest { + __block id blockResponseObject = nil; + __block id blockError = nil; + + NSURL *secureBaseURL = [NSURL URLWithString:[self.baseURL.absoluteString stringByReplacingOccurrencesOfString:@"http://" withString:@"https://"]]; + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:secureBaseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + blockResponseObject = responseObject; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + blockError = error; + }]; + + [operation start]; + + expect([operation isFinished]).will.beTruthy(); + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFHTTPRequestSerializationTests.m b/AFNetworking-master/Tests/Tests/AFHTTPRequestSerializationTests.m new file mode 100755 index 0000000..ad73309 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFHTTPRequestSerializationTests.m @@ -0,0 +1,151 @@ +// AFHTTPSerializationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFURLRequestSerialization.h" + +@interface AFMultipartBodyStream : NSInputStream +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@end + +@protocol AFMultipartFormDataTest +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; + +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; +@end + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) NSUInteger bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) NSUInteger contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +#pragma mark - + +@interface AFHTTPRequestSerializationTests : AFTestCase +@property (nonatomic, strong) AFHTTPRequestSerializer *requestSerializer; +@end + +@implementation AFHTTPRequestSerializationTests + +- (void)setUp { + [super setUp]; + self.requestSerializer = [AFHTTPRequestSerializer serializer]; +} + +#pragma mark - + +- (void)testThatAFHTTPRequestSerialiationSerializesQueryParametersCorrectly { + NSURLRequest *originalRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; + NSURLRequest *serializedRequest = [self.requestSerializer requestBySerializingRequest:originalRequest withParameters:@{@"key":@"value"} error:nil]; + + XCTAssertTrue([[[serializedRequest URL] query] isEqualToString:@"key=value"], @"Query parameters have not been serialized correctly (%@)", [[serializedRequest URL] query]); +} + +- (void)testThatAFHTTPRequestSerialiationSerializesURLEncodableQueryParametersCorrectly { + NSURLRequest *originalRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; + NSURLRequest *serializedRequest = [self.requestSerializer requestBySerializingRequest:originalRequest withParameters:@{@"key":@" !\"#$%&'()*+,/"} error:nil]; + + XCTAssertTrue([[[serializedRequest URL] query] isEqualToString:@"key=%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2F"], @"Query parameters have not been serialized correctly (%@)", [[serializedRequest URL] query]); +} + +- (void)testThatAFHTTPRequestSerialiationSerializesURLEncodedQueryParametersCorrectly { + NSURLRequest *originalRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; + NSURLRequest *serializedRequest = [self.requestSerializer requestBySerializingRequest:originalRequest withParameters:@{@"key":@"%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2F"} error:nil]; + + XCTAssertTrue([[[serializedRequest URL] query] isEqualToString:@"key=%2520%2521%2522%2523%2524%2525%2526%2527%2528%2529%252A%252B%252C%252F"], @"Query parameters have not been serialized correctly (%@)", [[serializedRequest URL] query]); +} + +- (void)testThatAFHTTPRequestSerialiationSerializesQueryParametersCorrectlyFromQuerySerializationBlock { + [self.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { + __block NSMutableString *query = [NSMutableString stringWithString:@""]; + [parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [query appendFormat:@"%@**%@",key,obj]; + }]; + + return query; + }]; + + NSURLRequest *originalRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; + NSURLRequest *serializedRequest = [self.requestSerializer requestBySerializingRequest:originalRequest withParameters:@{@"key":@"value"} error:nil]; + + XCTAssertTrue([[[serializedRequest URL] query] isEqualToString:@"key**value"], @"Custom Query parameters have not been serialized correctly (%@) by the query string block.", [[serializedRequest URL] query]); +} + +- (void)testThatAFHTTPRequestSerialiationSerializesMIMETypeCorrectly { + NSMutableURLRequest *originalRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; + Class streamClass = NSClassFromString(@"AFStreamingMultipartFormData"); + id formData = [[streamClass alloc] initWithURLRequest:originalRequest stringEncoding:NSUTF8StringEncoding]; + + NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"adn_0" ofType:@"cer"]]; + + [formData appendPartWithFileURL:fileURL name:@"test" error:NULL]; + + AFHTTPBodyPart *part = [formData.bodyStream.HTTPBodyParts firstObject]; + + XCTAssertTrue([part.headers[@"Content-Type"] isEqualToString:@"application/x-x509-ca-cert"], @"MIME Type has not been obtained correctly (%@)", part.headers[@"Content-Type"]); +} + +#pragma mark - + +- (void)testThatValueForHTTPHeaderFieldReturnsSetValue { + [self.requestSerializer setValue:@"Actual Value" forHTTPHeaderField:@"Set-Header"]; + NSString *value = [self.requestSerializer valueForHTTPHeaderField:@"Set-Header"]; + + expect(value).to.equal(@"Actual Value"); +} + +- (void)testThatValueForHTTPHeaderFieldReturnsNilForUnsetHeader { + NSString *value = [self.requestSerializer valueForHTTPHeaderField:@"Unset-Header"]; + + expect(value).to.beNil(); +} + +- (void)testQueryStringSerializationCanFailWithError { + AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; + + NSError *serializerError = [NSError errorWithDomain:@"TestDomain" code:0 userInfo:nil]; + + [serializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { + *error = serializerError; + return nil; + }]; + + NSError *error; + NSURLRequest *request = [serializer requestWithMethod:@"GET" URLString:@"url" parameters:@{} error:&error]; + + expect(request).to.beNil(); + expect(error).to.equal(serializerError); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFHTTPResponseSerializationTests.m b/AFNetworking-master/Tests/Tests/AFHTTPResponseSerializationTests.m new file mode 100755 index 0000000..a6cc0ea --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFHTTPResponseSerializationTests.m @@ -0,0 +1,67 @@ +// AFHTTPResponseSerializationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFURLResponseSerialization.h" + +@interface AFHTTPResponseSerializationTests : AFTestCase +@property (nonatomic, strong) AFHTTPResponseSerializer *responseSerializer; +@end + +@implementation AFHTTPResponseSerializationTests + +- (void)setUp { + [super setUp]; + self.responseSerializer = [AFHTTPResponseSerializer serializer]; +} + +#pragma mark - + +- (void)testThatAFHTTPResponseSerializationHandlesAll2XXCodes { + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + [indexSet enumerateIndexesUsingBlock:^(NSUInteger statusCode, BOOL *stop) { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:statusCode HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/html"}]; + + XCTAssert([self.responseSerializer.acceptableStatusCodes containsIndex:statusCode], @"Status code %@ should be acceptable", @(statusCode)); + + NSError *error = nil; + [self.responseSerializer validateResponse:response data:[@"text" dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + + XCTAssertNil(error, @"Error handling status code %@", @(statusCode)); + }]; +} + +- (void)testThatAFHTTPResponseSerializationFailsAll4XX5XXStatusCodes { + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(400, 200)]; + [indexSet enumerateIndexesUsingBlock:^(NSUInteger statusCode, BOOL *stop) { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:statusCode HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/html"}]; + + XCTAssert(![self.responseSerializer.acceptableStatusCodes containsIndex:statusCode], @"Status code %@ should not be acceptable", @(statusCode)); + + NSError *error = nil; + [self.responseSerializer validateResponse:response data:[@"text" dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + + XCTAssertNotNil(error, @"Did not fail handling status code %@",@(statusCode)); + }]; +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFHTTPSessionManagerTests.m b/AFNetworking-master/Tests/Tests/AFHTTPSessionManagerTests.m new file mode 100755 index 0000000..2f99616 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFHTTPSessionManagerTests.m @@ -0,0 +1,144 @@ +// AFHTTPSessionManagerTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFHTTPSessionManager.h" + +@interface AFHTTPSessionManagerTests : AFTestCase +@property (readwrite, nonatomic, strong) AFHTTPSessionManager *manager; +@end + +@implementation AFHTTPSessionManagerTests + +- (void)setUp { + [super setUp]; + self.manager = [[AFHTTPSessionManager alloc] initWithBaseURL:self.baseURL]; +} + +- (void)tearDown { + [self.manager invalidateSessionCancelingTasks:YES]; + [super tearDown]; +} + +- (void)testThatOperationInvokesCompletionHandlerWithResponseObjectOnSuccess { + __block id blockResponseObject = nil; + __block id blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + NSURLSessionDataTask *task = [self.manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + blockResponseObject = responseObject; + blockError = error; + }]; + + [task resume]; + + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + expect(blockError).will.beNil(); + expect(blockResponseObject).willNot.beNil(); +} + +- (void)testThatOperationInvokesFailureCompletionBlockWithErrorOnFailure { + __block id blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/404" relativeToURL:self.baseURL]]; + NSURLSessionDataTask *task = [self.manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + blockError = error; + }]; + + [task resume]; + + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + expect(blockError).willNot.beNil(); +} + +- (void)testThatRedirectBlockIsCalledWhen302IsEncountered { + __block BOOL success; + __block NSError *blockError = nil; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/redirect/1" relativeToURL:self.baseURL]]; + NSURLSessionDataTask *task = [self.manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { + blockError = error; + }]; + + [self.manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest *(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request) { + if (response) { + success = YES; + } + + return request; + }]; + + [task resume]; + + expect(task.state).will.equal(NSURLSessionTaskStateCompleted); + expect(blockError).will.beNil(); + expect(success).will.beTruthy(); +} + +- (void)testDownloadFileCompletionSpecifiesURLInCompletionWithManagerDidFinishBlock { + __block BOOL managerDownloadFinishedBlockExecuted = NO; + __block BOOL completionBlockExecuted = NO; + __block NSURL *downloadFilePath = nil; + [self.manager setDownloadTaskDidFinishDownloadingBlock:^NSURL *(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location) { + managerDownloadFinishedBlockExecuted = YES; + NSURL *dirURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; + return [dirURL URLByAppendingPathComponent:@"t1.file"]; + }]; + + NSURLSessionDownloadTask *downloadTask = [self.manager downloadTaskWithRequest:[NSURLRequest requestWithURL:self.baseURL] + progress:nil + destination:nil + completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + downloadFilePath = filePath; + completionBlockExecuted = YES; + }]; + [downloadTask resume]; + expect(completionBlockExecuted).will.equal(YES); + expect(managerDownloadFinishedBlockExecuted).will.equal(YES); + expect(downloadFilePath).willNot.beNil(); +} + +- (void)testDownloadFileCompletionSpecifiesURLInCompletionBlock { + __block BOOL destinationBlockExecuted = NO; + __block BOOL completionBlockExecuted = NO; + __block NSURL *downloadFilePath = nil; + + NSURLSessionDownloadTask *downloadTask = [self.manager downloadTaskWithRequest:[NSURLRequest requestWithURL:self.baseURL] + progress:nil + destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { + destinationBlockExecuted = YES; + NSURL *dirURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; + return [dirURL URLByAppendingPathComponent:@"t1.file"]; + } + completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { + downloadFilePath = filePath; + completionBlockExecuted = YES; + }]; + [downloadTask resume]; + expect(completionBlockExecuted).will.equal(YES); + expect(destinationBlockExecuted).will.equal(YES); + expect(downloadFilePath).willNot.beNil(); +} + + + +@end diff --git a/AFNetworking-master/Tests/Tests/AFJSONSerializationTests.m b/AFNetworking-master/Tests/Tests/AFJSONSerializationTests.m new file mode 100755 index 0000000..ebd4b7a --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFJSONSerializationTests.m @@ -0,0 +1,136 @@ +// AFJSONSerializationTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +static NSData * AFJSONTestData() { + return [NSJSONSerialization dataWithJSONObject:@{@"foo": @"bar"} options:0 error:nil]; +} + +#pragma mark - + +@interface AFJSONRequestSerializationTests : AFTestCase +@property (nonatomic, strong) AFJSONRequestSerializer *requestSerializer; +@end + +@implementation AFJSONRequestSerializationTests + +- (void)setUp { + self.requestSerializer = [[AFJSONRequestSerializer alloc] init]; +} + +#pragma mark - + +- (void)testThatJSONRequestSerializationHandlesParametersDictionary { + NSDictionary *parameters = @{@"key":@"value"}; + NSError *error = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:AFNetworkingTestsBaseURLString parameters:parameters error:&error]; + + XCTAssertNil(error, @"Serialization error should be nil"); + + NSString *body = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]; + + XCTAssertTrue([@"{\"key\":\"value\"}" isEqualToString:body], @"Parameters were not encoded correctly"); +} + +- (void)testThatJSONRequestSerializationHandlesParametersArray { + NSArray *parameters = @[@{@"key":@"value"}]; + NSError *error = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:AFNetworkingTestsBaseURLString parameters:parameters error:&error]; + + XCTAssertNil(error, @"Serialization error should be nil"); + + NSString *body = [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]; + + XCTAssertTrue([@"[{\"key\":\"value\"}]" isEqualToString:body], @"Parameters were not encoded correctly"); +} + +@end + +#pragma mark - + +@interface AFJSONResponseSerializationTests : AFTestCase +@property (nonatomic, strong) AFJSONResponseSerializer *responseSerializer; +@end + +@implementation AFJSONResponseSerializationTests + +- (void)setUp { + [super setUp]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; +} + +#pragma mark - + +- (void)testThatJSONResponseSerializerAcceptsApplicationJSONMimeType { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/json"}]; + + NSError *error = nil; + [self.responseSerializer validateResponse:response data:AFJSONTestData() error:&error]; + + XCTAssertNil(error, @"Error handling application/json"); +} + +- (void)testThatJSONResponseSerializerAcceptsTextJSONMimeType { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/json"}]; + NSError *error = nil; + [self.responseSerializer validateResponse:response data:AFJSONTestData()error:&error]; + + XCTAssertNil(error, @"Error handling text/json"); +} + +- (void)testThatJSONResponseSerializerAcceptsTextJavaScriptMimeType { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/javascript"}]; + NSError *error = nil; + [self.responseSerializer validateResponse:response data:AFJSONTestData() error:&error]; + + XCTAssertNil(error, @"Error handling text/javascript"); +} + +- (void)testThatJSONResponseSerializerDoesNotAcceptNonStandardJSONMimeType { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"nonstandard/json"}]; + NSError *error = nil; + [self.responseSerializer validateResponse:response data:AFJSONTestData() error:&error]; + + XCTAssertNotNil(error, @"Error should have been thrown for nonstandard/json"); +} + +- (void)testThatJSONResponseSerializerReturnsDictionaryForValidJSONDictionary { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/json"}]; + NSError *error = nil; + id responseObject = [self.responseSerializer responseObjectForResponse:response data:AFJSONTestData() error:&error]; + + XCTAssertNil(error, @"Serialization error should be nil"); + XCTAssert([responseObject isKindOfClass:[NSDictionary class]], @"Expected response to be a NSDictionary"); +} + +- (void)testThatJSONResponseSerializerReturnsErrorForInvalidJSON { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type":@"text/json"}]; + NSError *error = nil; + [self.responseSerializer responseObjectForResponse:response data:[@"{invalid}" dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + + XCTAssertNotNil(error, @"Serialization error should not be nil"); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFNetworkActivityManagerTests.m b/AFNetworking-master/Tests/Tests/AFNetworkActivityManagerTests.m new file mode 100755 index 0000000..40b1c4a --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFNetworkActivityManagerTests.m @@ -0,0 +1,107 @@ +// AFNetworkActivityManagerTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFNetworkActivityIndicatorManager.h" +#import "AFHTTPRequestOperation.h" + +@interface AFNetworkActivityManagerTests : AFTestCase +@property (nonatomic, strong) AFNetworkActivityIndicatorManager *networkActivityIndicatorManager; +@property (nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; +@property (nonatomic, strong) id mockApplication; +@end + +#pragma mark - + +@implementation AFNetworkActivityManagerTests + +- (void)setUp { + [super setUp]; + + self.networkActivityIndicatorManager = [[AFNetworkActivityIndicatorManager alloc] init]; + self.networkActivityIndicatorManager.enabled = YES; + + self.mockApplication = [OCMockObject mockForClass:[UIApplication class]]; + [[[self.mockApplication stub] andReturn:self.mockApplication] sharedApplication]; + + [[[self.mockApplication stub] andDo:^(NSInvocation *invocation) { + [invocation setReturnValue:(void *)&_isNetworkActivityIndicatorVisible]; + }] isNetworkActivityIndicatorVisible]; + + [[[self.mockApplication stub] andDo:^(NSInvocation *invocation) { + [invocation getArgument:&_isNetworkActivityIndicatorVisible atIndex:2]; + }] setNetworkActivityIndicatorVisible:YES]; +} + +- (void)tearDown { + [super tearDown]; + [self.mockApplication stopMocking]; + + self.mockApplication = nil; + self.networkActivityIndicatorManager = nil; +} + +#pragma mark - + +- (void)testThatNetworkActivityIndicatorTurnsOffIndicatorWhenRequestSucceeds { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + expect([self.mockApplication isNetworkActivityIndicatorVisible]).will.beFalsy(); + } failure:nil]; + + [operation start]; + + expect([self.mockApplication isNetworkActivityIndicatorVisible]).will.beTruthy(); +} + +- (void)testThatNetworkActivityIndicatorTurnsOffIndicatorWhenRequestFails { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/status/500" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:^(AFHTTPRequestOperation *operation, NSError *error) { + expect([self.mockApplication isNetworkActivityIndicatorVisible]).will.beFalsy(); + }]; + + [operation start]; + + expect([self.mockApplication isNetworkActivityIndicatorVisible]).will.beTruthy(); +} + +- (void)testThatNetworkActivityIsUnchangedWhenManagerIsDisabled { + self.networkActivityIndicatorManager.enabled = NO; + + __block BOOL didChangeNetworkActivityIndicatorVisible = NO; + + [[[self.mockApplication stub] andDo:^(NSInvocation *invocation) { + didChangeNetworkActivityIndicatorVisible = YES; + }] setNetworkActivityIndicatorVisible:YES]; + + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/get" relativeToURL:self.baseURL]]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setCompletionBlockWithSuccess:nil failure:nil]; + + [operation start]; + + expect(didChangeNetworkActivityIndicatorVisible).will.beFalsy(); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFNetworkReachabilityManagerTests.m b/AFNetworking-master/Tests/Tests/AFNetworkReachabilityManagerTests.m new file mode 100755 index 0000000..1deaedc --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFNetworkReachabilityManagerTests.m @@ -0,0 +1,128 @@ +// AFNetworkReachabilityManagerTests.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFNetworkReachabilityManager.h" +#import + +@interface AFNetworkReachabilityManagerTests : AFTestCase +@property (nonatomic, strong) AFNetworkReachabilityManager *addressReachability; +@property (nonatomic, strong) AFNetworkReachabilityManager *domainReachability; +@end + +@implementation AFNetworkReachabilityManagerTests + +- (void)setUp { + [super setUp]; + + //both of these manager objects should always be reachable when the tests are run + self.domainReachability = [AFNetworkReachabilityManager managerForDomain:@"localhost"]; + + //don't use the shared manager because it retains state between tests + //but recreate it each time in the same way that the shared manager is created + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; + self.addressReachability = [AFNetworkReachabilityManager managerForAddress:&address]; +} + +- (void)tearDown +{ + [self.addressReachability stopMonitoring]; + [self.domainReachability stopMonitoring]; + + [super tearDown]; +} + +- (void)testAddressReachabilityStartsInUnknownState { + XCTAssertEqual(self.addressReachability.networkReachabilityStatus, AFNetworkReachabilityStatusUnknown, + @"Reachability should start in an unknown state"); +} + +- (void)testDomainReachabilityStartsInUnknownState { + XCTAssertEqual(self.domainReachability.networkReachabilityStatus, AFNetworkReachabilityStatusUnknown, + @"Reachability should start in an unknown state"); +} + +- (void)verifyReachabilityNotificationGetsPostedWithManager:(AFNetworkReachabilityManager *)manager +{ + [self expectationForNotification:AFNetworkingReachabilityDidChangeNotification + object:nil + handler:^BOOL(NSNotification *note) { + AFNetworkReachabilityStatus status; + status = [note.userInfo[AFNetworkingReachabilityNotificationStatusItem] integerValue]; + BOOL reachable = (status == AFNetworkReachabilityStatusReachableViaWiFi + || status == AFNetworkReachabilityStatusReachableViaWWAN); + + XCTAssert(reachable, + @"Expected network to be reachable but got '%@'", + AFStringFromNetworkReachabilityStatus(status)); + XCTAssertEqual(reachable, manager.isReachable, @"Expected status to match 'isReachable'"); + + return YES; + }]; + + [manager startMonitoring]; + + [self waitForExpectationsWithTimeout:5 handler:nil]; +} + +- (void)testAddressReachabilityNotification { + [self verifyReachabilityNotificationGetsPostedWithManager:self.addressReachability]; +} + +- (void)testDomainReachabilityNotification { + [self verifyReachabilityNotificationGetsPostedWithManager:self.domainReachability]; +} + +- (void)verifyReachabilityStatusBlockGetsCalledWithManager:(AFNetworkReachabilityManager *)manager +{ + XCTestExpectation *expectation = [self expectationWithDescription:@"reachability status change block gets called"]; + + typeof(manager) __weak weakManager = manager; + [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + BOOL reachable = (status == AFNetworkReachabilityStatusReachableViaWiFi + || status == AFNetworkReachabilityStatusReachableViaWWAN); + + XCTAssert(reachable, @"Expected network to be reachable but got '%@'", AFStringFromNetworkReachabilityStatus(status)); + XCTAssertEqual(reachable, weakManager.isReachable, @"Expected status to match 'isReachable'"); + + [expectation fulfill]; + }]; + + [manager startMonitoring]; + + [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { + [manager setReachabilityStatusChangeBlock:nil]; + }]; +} + +- (void)testAddressReachabilityBlock { + [self verifyReachabilityStatusBlockGetsCalledWithManager:self.addressReachability]; +} + +- (void)testDomainReachabilityBlock { + [self verifyReachabilityStatusBlockGetsCalledWithManager:self.domainReachability]; +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFPropertyListResponseSerializerTests.m b/AFNetworking-master/Tests/Tests/AFPropertyListResponseSerializerTests.m new file mode 100755 index 0000000..9c4d607 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFPropertyListResponseSerializerTests.m @@ -0,0 +1,48 @@ +// AFPropertyListResponseSerializerTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFURLResponseSerialization.h" + +@interface AFPropertyListResponseSerializerTests : AFTestCase +@property (nonatomic, strong) AFPropertyListResponseSerializer *responseSerializer; +@end + +@implementation AFPropertyListResponseSerializerTests + +- (void)setUp { + [super setUp]; + self.responseSerializer = [AFPropertyListResponseSerializer serializer]; +} + +#pragma mark - + +- (void)testThatPropertyListResponseSerializerHandles204 { + NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:204 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/x-plist"}]; + NSError *error; + id responseObject = [self.responseSerializer responseObjectForResponse:response data:nil error:&error]; + + XCTAssertNil(responseObject, @"Response should be nil when handling 204 with application/x-plist"); + XCTAssertNil(error, @"Error handling application/x-plist"); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFSecurityPolicyTests.m b/AFNetworking-master/Tests/Tests/AFSecurityPolicyTests.m new file mode 100755 index 0000000..8845513 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFSecurityPolicyTests.m @@ -0,0 +1,576 @@ +// AFSecurityPolicyTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFSecurityPolicy.h" + +@interface AFSecurityPolicyTests : AFTestCase +@end + +static SecTrustRef AFUTTrustChainForCertsInDirectory(NSString *directoryPath) { + NSArray *certFileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil]; + NSMutableArray *certs = [NSMutableArray arrayWithCapacity:[certFileNames count]]; + for (NSString *path in certFileNames) { + NSData *certData = [NSData dataWithContentsOfFile:[directoryPath stringByAppendingPathComponent:path]]; + SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); + [certs addObject:(__bridge id)(cert)]; + } + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + SecTrustCreateWithCertificates((__bridge CFTypeRef)(certs), policy, &trust); + CFRelease(policy); + + return trust; +} + +static SecTrustRef AFUTHTTPBinOrgServerTrust() { + NSString *bundlePath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] resourcePath]; + NSString *serverCertDirectoryPath = [bundlePath stringByAppendingPathComponent:@"HTTPBinOrgServerTrustChain"]; + + return AFUTTrustChainForCertsInDirectory(serverCertDirectoryPath); +} + +static SecTrustRef AFUTADNNetServerTrust() { + NSString *bundlePath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] resourcePath]; + NSString *serverCertDirectoryPath = [bundlePath stringByAppendingPathComponent:@"ADNNetServerTrustChain"]; + + return AFUTTrustChainForCertsInDirectory(serverCertDirectoryPath); +} + +static SecCertificateRef AFUTHTTPBinOrgCertificate() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"httpbinorg_01162016" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTCOMODORSADomainValidationSecureServerCertificate() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"COMODO_RSA_Domain_Validation_Secure_Server_CA" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTCOMODORSACertificate() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"COMODO_RSA_Certification_Authority" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTAddTrustExternalRootCertificate() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"AddTrust_External_CA_Root" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTSelfSignedCertificateWithoutDomain() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"NoDomains" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTSelfSignedCertificateWithCommonNameDomain() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"foobar.com" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static SecCertificateRef AFUTSelfSignedCertificateWithDNSNameDomain() { + NSString *certPath = [[NSBundle bundleForClass:[AFSecurityPolicyTests class]] pathForResource:@"AltName" ofType:@"cer"]; + NSCAssert(certPath != nil, @"Path for certificate should not be nil"); + NSData *certData = [NSData dataWithContentsOfFile:certPath]; + + return SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData)); +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static SecTrustRef AFUTTrustWithCertificate(SecCertificateRef certificate) { + NSArray *certs = [NSArray arrayWithObject:(__bridge id)(certificate)]; + + SecPolicyRef policy = SecPolicyCreateBasicX509(); + SecTrustRef trust = NULL; + SecTrustCreateWithCertificates((__bridge CFTypeRef)(certs), policy, &trust); + CFRelease(policy); + + return trust; +} + +#pragma mark - + +@implementation AFSecurityPolicyTests + +- (void)testLeafPublicKeyPinningIsEnforcedForHTTPBinOrgPinnedCertificateAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + + SecCertificateRef addtrustRootCertificate = AFUTAddTrustExternalRootCertificate(); + SecCertificateRef comodoRsaCACertificate = AFUTCOMODORSACertificate(); + SecCertificateRef comodoRsaDomainValidationCertificate = AFUTCOMODORSADomainValidationSecureServerCertificate(); + SecCertificateRef httpBinCertificate = AFUTHTTPBinOrgCertificate(); + + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(addtrustRootCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaCACertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaDomainValidationCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(httpBinCertificate)]]; + + CFRelease(addtrustRootCertificate); + CFRelease(comodoRsaCACertificate); + CFRelease(comodoRsaDomainValidationCertificate); + CFRelease(httpBinCertificate); + + [policy setValidatesCertificateChain:NO]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testPublicKeyChainPinningIsEnforcedForHTTPBinOrgPinnedCertificateAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + + SecTrustRef clientTrust = AFUTHTTPBinOrgServerTrust(); + NSArray * certificates = AFCertificateTrustChainForServerTrust(clientTrust); + CFRelease(clientTrust); + [policy setPinnedCertificates:certificates]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testLeafCertificatePinningIsEnforcedForHTTPBinOrgPinnedCertificateAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + + SecCertificateRef addtrustRootCertificate = AFUTAddTrustExternalRootCertificate(); + SecCertificateRef comodoRsaCACertificate = AFUTCOMODORSACertificate(); + SecCertificateRef comodoRsaDomainValidationCertificate = AFUTCOMODORSADomainValidationSecureServerCertificate(); + SecCertificateRef httpBinCertificate = AFUTHTTPBinOrgCertificate(); + + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(addtrustRootCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaCACertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaDomainValidationCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(httpBinCertificate)]]; + + CFRelease(addtrustRootCertificate); + CFRelease(comodoRsaCACertificate); + CFRelease(comodoRsaDomainValidationCertificate); + CFRelease(httpBinCertificate); + + [policy setValidatesCertificateChain:NO]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testCertificateChainPinningIsEnforcedForHTTPBinOrgPinnedCertificateAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + SecTrustRef clientTrust = AFUTHTTPBinOrgServerTrust(); + NSArray * certificates = AFCertificateTrustChainForServerTrust(clientTrust); + CFRelease(clientTrust); + [policy setPinnedCertificates:certificates]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testNoPinningIsEnforcedForHTTPBinOrgPinnedCertificateAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + + SecCertificateRef certificate = AFUTHTTPBinOrgCertificate(); + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]]; + CFRelease(certificate); + [policy setAllowInvalidCertificates:YES]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Pinning should not have been enforced"); + CFRelease(trust); +} + +- (void)testPublicKeyPinningFailsForHTTPBinOrgIfNoCertificateIsPinned { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + [policy setPinnedCertificates:@[]]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"] == NO, @"HTTPBin.org Public Key Pinning Should have failed with no pinned certificate"); + CFRelease(trust); +} + +- (void)testCertificatePinningIsEnforcedForHTTPBinOrgPinnedCertificateWithDomainNameValidationAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + + SecCertificateRef addtrustRootCertificate = AFUTAddTrustExternalRootCertificate(); + SecCertificateRef comodoRsaCACertificate = AFUTCOMODORSACertificate(); + SecCertificateRef comodoRsaDomainValidationCertificate = AFUTCOMODORSADomainValidationSecureServerCertificate(); + SecCertificateRef httpBinCertificate = AFUTHTTPBinOrgCertificate(); + + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(addtrustRootCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaCACertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaDomainValidationCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(httpBinCertificate)]]; + + CFRelease(addtrustRootCertificate); + CFRelease(comodoRsaCACertificate); + CFRelease(comodoRsaDomainValidationCertificate); + CFRelease(httpBinCertificate); + + policy.validatesDomainName = YES; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testCertificatePinningIsEnforcedForHTTPBinOrgPinnedCertificateWithCaseInsensitiveDomainNameValidationAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + + SecCertificateRef addtrustRootCertificate = AFUTAddTrustExternalRootCertificate(); + SecCertificateRef comodoRsaCACertificate = AFUTCOMODORSACertificate(); + SecCertificateRef comodoRsaDomainValidationCertificate = AFUTCOMODORSADomainValidationSecureServerCertificate(); + SecCertificateRef httpBinCertificate = AFUTHTTPBinOrgCertificate(); + + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(addtrustRootCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaCACertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaDomainValidationCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(httpBinCertificate)]]; + + CFRelease(addtrustRootCertificate); + CFRelease(comodoRsaCACertificate); + CFRelease(comodoRsaDomainValidationCertificate); + CFRelease(httpBinCertificate); + + policy.validatesDomainName = YES; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpBin.org"], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testCertificatePinningIsEnforcedForHTTPBinOrgPinnedPublicKeyWithDomainNameValidationAgainstHTTPBinOrgServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + + SecCertificateRef addtrustRootCertificate = AFUTAddTrustExternalRootCertificate(); + SecCertificateRef comodoRsaCACertificate = AFUTCOMODORSACertificate(); + SecCertificateRef comodoRsaDomainValidationCertificate = AFUTCOMODORSADomainValidationSecureServerCertificate(); + SecCertificateRef httpBinCertificate = AFUTHTTPBinOrgCertificate(); + + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(addtrustRootCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaCACertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(comodoRsaDomainValidationCertificate), + (__bridge_transfer NSData *)SecCertificateCopyData(httpBinCertificate)]]; + + CFRelease(addtrustRootCertificate); + CFRelease(comodoRsaCACertificate); + CFRelease(comodoRsaDomainValidationCertificate); + CFRelease(httpBinCertificate); + + policy.validatesDomainName = YES; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Public Key Pinning Mode Failed"); + CFRelease(trust); +} + +- (void)testCertificatePinningFailsForHTTPBinOrgIfNoCertificateIsPinned { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + [policy setPinnedCertificates:@[]]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"] == NO, @"HTTPBin.org Certificate Pinning Should have failed with no pinned certificate"); + CFRelease(trust); +} + +- (void)testCertificatePinningFailsForHTTPBinOrgIfDomainNameDoesntMatch { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + SecCertificateRef certificate = AFUTHTTPBinOrgCertificate(); + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]]; + CFRelease(certificate); + policy.validatesDomainName = YES; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"www.httpbin.org"] == NO, @"HTTPBin.org Certificate Pinning Should have failed with no pinned certificate"); + CFRelease(trust); +} + +- (void)testNoPinningIsEnforcedForHTTPBinOrgIfNoCertificateIsPinned { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + [policy setPinnedCertificates:@[]]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"], @"HTTPBin.org Pinning should not have been enforced"); + CFRelease(trust); +} + +- (void)testPublicKeyPinningForHTTPBinOrgFailsWhenPinnedAgainstADNServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + SecCertificateRef certificate = AFUTHTTPBinOrgCertificate(); + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]]; + [policy setValidatesCertificateChain:NO]; + + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"] == NO, @"HTTPBin.org Public Key Pinning Should have failed against ADN"); + CFRelease(trust); +} + +- (void)testCertificatePinningForHTTPBinOrgFailsWhenPinnedAgainstADNServerTrust { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + SecCertificateRef certificate = AFUTHTTPBinOrgCertificate(); + [policy setPinnedCertificates:@[(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]]; + [policy setValidatesCertificateChain:NO]; + + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"] == NO, @"HTTPBin.org Certificate Pinning Should have failed against ADN"); + CFRelease(trust); +} + +- (void)testDefaultPolicyContainsHTTPBinOrgCertificate { + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + SecCertificateRef cert = AFUTHTTPBinOrgCertificate(); + NSData *certData = (__bridge NSData *)(SecCertificateCopyData(cert)); + CFRelease(cert); + NSInteger index = [policy.pinnedCertificates indexOfObjectPassingTest:^BOOL(NSData *data, NSUInteger idx, BOOL *stop) { + return [data isEqualToData:certData]; + }]; + + XCTAssert(index!=NSNotFound, @"HTTPBin.org certificate not found in the default certificates"); +} + +- (void)testCertificatePinningIsEnforcedWhenPinningSelfSignedCertificateWithoutDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithoutDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + policy.validatesDomainName = NO; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foo.bar"], @"Certificate should be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testCertificatePinningWhenPinningSelfSignedCertificateWithoutDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithoutDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foo.bar"] == NO, @"Certificate should not be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testCertificatePinningIsEnforcedWhenPinningSelfSignedCertificateWithCommonNameDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithCommonNameDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foobar.com"], @"Certificate should be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testCertificatePinningWhenPinningSelfSignedCertificateWithCommonNameDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithCommonNameDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foo.bar"] == NO, @"Certificate should not be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testCertificatePinningIsEnforcedWhenPinningSelfSignedCertificateWithDNSNameDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithDNSNameDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foobar.com"], @"Certificate should be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testCertificatePinningWhenPinningSelfSignedCertificateWithDNSNameDomain { + SecCertificateRef certificate = AFUTSelfSignedCertificateWithDNSNameDomain(); + SecTrustRef trust = AFUTTrustWithCertificate(certificate); + + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + policy.pinnedCertificates = @[ (__bridge_transfer id)SecCertificateCopyData(certificate) ]; + policy.allowInvalidCertificates = YES; + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foo.bar"] == NO, @"Certificate should not be trusted"); + + CFRelease(trust); + CFRelease(certificate); +} + +- (void)testDefaultPolicySetToCertificateChain { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"Pinning with Default Certficiate Chain Failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicySetToLeafCertificate { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + [policy setValidatesCertificateChain:NO]; + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"Pinning with Default Leaf Certficiate Failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicySetToPublicKeyChain { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"Pinning with Default Public Key Chain Failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicySetToLeafPublicKey { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + [policy setValidatesCertificateChain:NO]; + SecTrustRef trust = AFUTADNNetServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil], @"Pinning with Default Leaf Public Key Failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicySetToCertificateChainFailsWithMissingChain { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + + // By default the cer files are picked up from the bundle, this forces them to be cleared to emulate having none available + [policy setPinnedCertificates:@[]]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil] == NO, @"Pinning with Certificate Chain Mode and Missing Chain should have failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicySetToPublicKeyChainFailsWithMissingChain { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + + // By default the cer files are picked up from the bundle, this forces them to be cleared to emulate having none available + [policy setPinnedCertificates:@[]]; + + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:nil] == NO, @"Pinning with Public Key Chain Mode and Missing Chain should have failed"); + CFRelease(trust); +} + +- (void)testDefaultPolicyIsSetToAFSSLPinningModeNone { + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + + XCTAssert(policy.SSLPinningMode==AFSSLPinningModeNone, @"Default policy is not set to AFSSLPinningModeNone."); +} + +- (void)testDefaultPolicyMatchesTrustedCertificateWithMatchingHostnameAndRejectsOthers { + { + //check non-trusted certificate, incorrect domain + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + SecTrustRef trust = AFUTTrustWithCertificate(AFUTSelfSignedCertificateWithCommonNameDomain()); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"different.foobar.com"] == NO, @"Invalid certificate with mismatching domain should fail"); + CFRelease(trust); + } + { + //check non-trusted certificate, correct domain + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + SecTrustRef trust = AFUTTrustWithCertificate(AFUTSelfSignedCertificateWithCommonNameDomain()); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"foobar.com"] == NO, @"Invalid certificate with matching domain should fail"); + CFRelease(trust); + } + { + //check trusted certificate, wrong domain + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"nothttpbin.org"] == NO, @"Valid certificate with mismatching domain should fail"); + CFRelease(trust); + } + { + //check trusted certificate, correct domain + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + SecTrustRef trust = AFUTHTTPBinOrgServerTrust(); + XCTAssert([policy evaluateServerTrust:trust forDomain:@"httpbin.org"] == YES, @"Valid certificate with matching domain should pass"); + CFRelease(trust); + } +} + +- (void)testDefaultPolicyIsSetToNotAllowInvalidSSLCertificates { + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + + XCTAssert(policy.allowInvalidCertificates == NO, @"Default policy should not allow invalid ssl certificates"); +} + +- (void)testPolicyWithPinningModeIsSetToNotAllowInvalidSSLCertificates { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + + XCTAssert(policy.allowInvalidCertificates == NO, @"policyWithPinningMode: should not allow invalid ssl certificates by default."); +} + +- (void)testPolicyWithPinningModeIsSetToValidatesDomainName { + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; + + XCTAssert(policy.validatesDomainName == YES, @"policyWithPinningMode: should validate domain names by default."); +} + +- (void)testThatSSLPinningPolicyClassMethodContainsDefaultCertificates{ + AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; + [policy setValidatesCertificateChain:NO]; + XCTAssertNotNil(policy.pinnedCertificates, @"Default certificate array should not be empty for SSL pinning mode policy"); +} + +- (void)testThatDefaultPinningPolicyClassMethodContainsNoDefaultCertificates{ + AFSecurityPolicy *policy = [AFSecurityPolicy defaultPolicy]; + XCTAssertNil(policy.pinnedCertificates, @"Default certificate array should be empty for default policy."); +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFTestCase.h b/AFNetworking-master/Tests/Tests/AFTestCase.h new file mode 100755 index 0000000..7999960 --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFTestCase.h @@ -0,0 +1,34 @@ +// AFTestCase.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#define EXP_SHORTHAND YES +#import "Expecta.h" +#import "OCMock.h" + +extern NSString * const AFNetworkingTestsBaseURLString; + +@interface AFTestCase : XCTestCase + +@property (nonatomic, strong, readonly) NSURL *baseURL; + +@end diff --git a/AFNetworking-master/Tests/Tests/AFTestCase.m b/AFNetworking-master/Tests/Tests/AFTestCase.m new file mode 100755 index 0000000..cbd12ce --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFTestCase.m @@ -0,0 +1,44 @@ +// AFTestCase.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +NSString * const AFNetworkingTestsBaseURLString = @"https://httpbin.org/"; + +@implementation AFTestCase + +- (void)setUp { + [super setUp]; + + [Expecta setAsynchronousTestTimeout:5.0]; +} + +- (void)tearDown { + [super tearDown]; +} + +#pragma mark - + +- (NSURL *)baseURL { + return [NSURL URLWithString:AFNetworkingTestsBaseURLString]; +} + +@end diff --git a/AFNetworking-master/Tests/Tests/AFURLSessionManagerTests.m b/AFNetworking-master/Tests/Tests/AFURLSessionManagerTests.m new file mode 100755 index 0000000..39a5a7f --- /dev/null +++ b/AFNetworking-master/Tests/Tests/AFURLSessionManagerTests.m @@ -0,0 +1,81 @@ +// AFNetworkActivityManagerTests.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFTestCase.h" + +#import "AFURLSessionManager.h" + +@interface AFURLSessionManagerTests : AFTestCase +@property (readwrite, nonatomic, strong) AFURLSessionManager *manager; +@end + +@implementation AFURLSessionManagerTests + +- (void)setUp { + [super setUp]; + self.manager = [[AFURLSessionManager alloc] init]; +} + +#pragma mark - + +- (void)testUploadTasksProgressBecomesPartOfCurrentProgress { + NSProgress *overallProgress = [NSProgress progressWithTotalUnitCount:100]; + + [overallProgress becomeCurrentWithPendingUnitCount:80]; + NSProgress *uploadProgress = nil; + + [self.manager uploadTaskWithRequest:[NSURLRequest requestWithURL:self.baseURL] + fromData:[NSData data] + progress:&uploadProgress + completionHandler:nil]; + [overallProgress resignCurrent]; + + expect(overallProgress.fractionCompleted).to.equal(0); + + uploadProgress.totalUnitCount = 1; + uploadProgress.completedUnitCount = 1; + + + expect(overallProgress.fractionCompleted).to.equal(0.8); +} + +- (void)testDownloadTasksProgressBecomesPartOfCurrentProgress { + NSProgress *overallProgress = [NSProgress progressWithTotalUnitCount:100]; + + [overallProgress becomeCurrentWithPendingUnitCount:80]; + NSProgress *downloadProgress = nil; + + [self.manager downloadTaskWithRequest:[NSURLRequest requestWithURL:self.baseURL] + progress:&downloadProgress + destination:nil + completionHandler:nil]; + [overallProgress resignCurrent]; + + expect(overallProgress.fractionCompleted).to.equal(0); + + downloadProgress.totalUnitCount = 1; + downloadProgress.completedUnitCount = 1; + + + expect(overallProgress.fractionCompleted).to.equal(0.8); +} + +@end diff --git a/AFNetworking-master/Tests/iOS Tests/en.lproj/InfoPlist.strings b/AFNetworking-master/Tests/iOS Tests/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..477b28f --- /dev/null +++ b/AFNetworking-master/Tests/iOS Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/AFNetworking-master/Tests/iOS Tests/iOS Tests-Info.plist b/AFNetworking-master/Tests/iOS Tests/iOS Tests-Info.plist new file mode 100755 index 0000000..32379be --- /dev/null +++ b/AFNetworking-master/Tests/iOS Tests/iOS Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.alamofire.afnetworking.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/AFNetworking-master/Tests/iOS Tests/iOS Tests-Prefix.pch b/AFNetworking-master/Tests/iOS Tests/iOS Tests-Prefix.pch new file mode 100755 index 0000000..3fdee9d --- /dev/null +++ b/AFNetworking-master/Tests/iOS Tests/iOS Tests-Prefix.pch @@ -0,0 +1,10 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h new file mode 100755 index 0000000..8242035 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h @@ -0,0 +1,75 @@ +// AFNetworkActivityIndicatorManager.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +/** + `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a network request operation has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. + + You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: + + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; + + By setting `enabled` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. + + See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: + http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 + */ +@interface AFNetworkActivityIndicatorManager : NSObject + +/** + A Boolean value indicating whether the manager is enabled. + + If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. + */ +@property (nonatomic, assign, getter = isEnabled) BOOL enabled; + +/** + A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. + */ +@property (readonly, nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; + +/** + Returns the shared network activity indicator manager object for the system. + + @return The systemwide network activity indicator manager. + */ ++ (instancetype)sharedManager; + +/** + Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. + */ +- (void)incrementActivityCount; + +/** + Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. + */ +- (void)decrementActivityCount; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m new file mode 100755 index 0000000..82c6cc3 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m @@ -0,0 +1,172 @@ +// AFNetworkActivityIndicatorManager.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "AFNetworkActivityIndicatorManager.h" + +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.17; + +static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { + if ([[notification object] isKindOfClass:[AFURLConnectionOperation class]]) { + return [(AFURLConnectionOperation *)[notification object] request]; + } + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + if ([[notification object] respondsToSelector:@selector(originalRequest)]) { + return [(NSURLSessionTask *)[notification object] originalRequest]; + } +#endif + + return nil; +} + +@interface AFNetworkActivityIndicatorManager () +@property (readwrite, nonatomic, assign) NSInteger activityCount; +@property (readwrite, nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; +@property (readonly, nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; + +- (void)updateNetworkActivityIndicatorVisibility; +- (void)updateNetworkActivityIndicatorVisibilityDelayed; +@end + +@implementation AFNetworkActivityIndicatorManager +@dynamic networkActivityIndicatorVisible; + ++ (instancetype)sharedManager { + static AFNetworkActivityIndicatorManager *_sharedManager = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _sharedManager = [[self alloc] init]; + }); + + return _sharedManager; +} + ++ (NSSet *)keyPathsForValuesAffectingIsNetworkActivityIndicatorVisible { + return [NSSet setWithObject:@"activityCount"]; +} + +- (id)init { + self = [super init]; + if (!self) { + return nil; + } + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil]; + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; +#endif + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_activityIndicatorVisibilityTimer invalidate]; +} + +- (void)updateNetworkActivityIndicatorVisibilityDelayed { + if (self.enabled) { + // Delay hiding of activity indicator for a short interval, to avoid flickering + if (![self isNetworkActivityIndicatorVisible]) { + [self.activityIndicatorVisibilityTimer invalidate]; + self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; + [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; + } else { + [self performSelectorOnMainThread:@selector(updateNetworkActivityIndicatorVisibility) withObject:nil waitUntilDone:NO modes:@[NSRunLoopCommonModes]]; + } + } +} + +- (BOOL)isNetworkActivityIndicatorVisible { + return self.activityCount > 0; +} + +- (void)updateNetworkActivityIndicatorVisibility { +#if !defined(AF_APP_EXTENSIONS) + [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; +#endif +} + +- (void)setActivityCount:(NSInteger)activityCount { + @synchronized(self) { + _activityCount = activityCount; + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)incrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { + _activityCount++; + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)decrementActivityCount { + [self willChangeValueForKey:@"activityCount"]; + @synchronized(self) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + _activityCount = MAX(_activityCount - 1, 0); +#pragma clang diagnostic pop + } + [self didChangeValueForKey:@"activityCount"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateNetworkActivityIndicatorVisibilityDelayed]; + }); +} + +- (void)networkRequestDidStart:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self incrementActivityCount]; + } +} + +- (void)networkRequestDidFinish:(NSNotification *)notification { + if ([AFNetworkRequestFromNotification(notification) URL]) { + [self decrementActivityCount]; + } +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h new file mode 100755 index 0000000..06e89c4 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h @@ -0,0 +1,63 @@ +// UIActivityIndicatorView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task. + */ +@interface UIActivityIndicatorView (AFNetworking) + +///---------------------------------- +/// @name Animating for Session Tasks +///---------------------------------- + +/** + Binds the animating state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; +#endif + +///--------------------------------------- +/// @name Animating for Request Operations +///--------------------------------------- + +/** + Binds the animating state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m new file mode 100755 index 0000000..1a36091 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m @@ -0,0 +1,96 @@ +// UIActivityIndicatorView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIActivityIndicatorView+AFNetworking.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@implementation UIActivityIndicatorView (AFNetworking) + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { + if (task.state != NSURLSessionTaskStateCompleted) { + if (task.state == NSURLSessionTaskStateRunning) { + [self startAnimating]; + } else { + [self stopAnimating]; + } + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; + } + } +} +#endif + +#pragma mark - + +- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { + if (![operation isFinished]) { + if ([operation isExecuting]) { + [self startAnimating]; + } else { + [self stopAnimating]; + } + + [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingOperationDidFinishNotification object:operation]; + } + } +} + +#pragma mark - + +- (void)af_startAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ + [self startAnimating]; + }); +} + +- (void)af_stopAnimating { + dispatch_async(dispatch_get_main_queue(), ^{ + [self stopAnimating]; + }); +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.h new file mode 100755 index 0000000..80eddc1 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.h @@ -0,0 +1,95 @@ +// UIAlertView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIAlertView` class. The methods in this category provide support for automatically showing an alert if a session task or request operation finishes with an error. Alert title and message are filled from the corresponding `localizedDescription` & `localizedRecoverySuggestion` or `localizedFailureReason` of the error. + */ +@interface UIAlertView (AFNetworking) + +///------------------------------------- +/// @name Showing Alert for Session Task +///------------------------------------- + +/** + Shows an alert view with the error of the specified session task, if any. + + @param task The session task. + @param delegate The alert view delegate. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate; +#endif + +/** + Shows an alert view with the error of the specified session task, if any, with a custom cancel button title and other button titles. + + @param task The session task. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; +#endif + +///------------------------------------------ +/// @name Showing Alert for Request Operation +///------------------------------------------ + +/** + Shows an alert view with the error of the specified request operation, if any. + + @param operation The request operation. + @param delegate The alert view delegate. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate; + +/** + Shows an alert view with the error of the specified request operation, if any, with a custom cancel button title and other button titles. + + @param operation The request operation. + @param delegate The alert view delegate. + @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. + @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. + */ ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.m new file mode 100755 index 0000000..a128544 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIAlertView+AFNetworking.m @@ -0,0 +1,141 @@ +// UIAlertView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIAlertView+AFNetworking.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void AFGetAlertViewTitleAndMessageFromError(NSError *error, NSString * __autoreleasing *title, NSString * __autoreleasing *message) { + if (error.localizedDescription && (error.localizedRecoverySuggestion || error.localizedFailureReason)) { + *title = error.localizedDescription; + + if (error.localizedRecoverySuggestion) { + *message = error.localizedRecoverySuggestion; + } else { + *message = error.localizedFailureReason; + } + } else if (error.localizedDescription) { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = error.localizedDescription; + } else { + *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); + *message = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ Error: %ld", @"AFNetworking", @"Fallback Error Failure Reason Format"), error.domain, (long)error.code]; + } +} + +@implementation UIAlertView (AFNetworking) + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate +{ + [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} +#endif + +#pragma mark - + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate +{ + [self showAlertViewForRequestOperationWithErrorOnCompletion:operation delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; +} + ++ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation + delegate:(id)delegate + cancelButtonTitle:(NSString *)cancelButtonTitle + otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION +{ + NSMutableArray *mutableOtherTitles = [NSMutableArray array]; + va_list otherButtonTitleList; + va_start(otherButtonTitleList, otherButtonTitles); + { + for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { + [mutableOtherTitles addObject:otherButtonTitle]; + } + } + va_end(otherButtonTitleList); + + __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + + if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) { + NSError *error = [(AFURLConnectionOperation *)notification.object error]; + if (error) { + NSString *title, *message; + AFGetAlertViewTitleAndMessageFromError(error, &title, &message); + + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; + for (NSString *otherButtonTitle in mutableOtherTitles) { + [alertView addButtonWithTitle:otherButtonTitle]; + } + [alertView setTitle:title]; + [alertView setMessage:message]; + [alertView show]; + } + } + + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + }]; +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.h new file mode 100755 index 0000000..6c09b7a --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.h @@ -0,0 +1,180 @@ +// UIButton+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. + + @warning Compound values for control `state` (such as `UIControlStateHighlighted | UIControlStateDisabled`) are unsupported. + */ +@interface UIButton (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loadiing performance on scroll views. By default, `UIButton` will use the `sharedImageCache` of `UIImageView`. + */ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + */ +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the request and response parameters will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure; + + +///------------------------------- +/// @name Setting Background Image +///------------------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. + + If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + @param state The control state. + @param url The URL used for the background image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. + + @param state The control state. + @param urlRequest The URL request used for the image request. + @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. + */ +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure; + + +///------------------------------ +/// @name Canceling Image Loading +///------------------------------ + +/** + Cancels any executing image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelImageRequestOperationForState:(UIControlState)state; + +/** + Cancels any executing background image operation for the specified control state of the receiver, if one exists. + + @param state The control state. + */ +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.m new file mode 100755 index 0000000..f34631e --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIButton+AFNetworking.m @@ -0,0 +1,293 @@ +// UIButton+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIButton+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLResponseSerialization.h" +#import "AFHTTPRequestOperation.h" + +#import "UIImageView+AFNetworking.h" + +@interface UIButton (_AFNetworking) +@end + +@implementation UIButton (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +#pragma mark - + +static char AFImageRequestOperationNormal; +static char AFImageRequestOperationHighlighted; +static char AFImageRequestOperationSelected; +static char AFImageRequestOperationDisabled; + +static const char * af_imageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_imageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_imageRequestOperationKeyForState(state)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_imageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +static char AFBackgroundImageRequestOperationNormal; +static char AFBackgroundImageRequestOperationHighlighted; +static char AFBackgroundImageRequestOperationSelected; +static char AFBackgroundImageRequestOperationDisabled; + +static const char * af_backgroundImageRequestOperationKeyForState(UIControlState state) { + switch (state) { + case UIControlStateHighlighted: + return &AFBackgroundImageRequestOperationHighlighted; + case UIControlStateSelected: + return &AFBackgroundImageRequestOperationSelected; + case UIControlStateDisabled: + return &AFBackgroundImageRequestOperationDisabled; + case UIControlStateNormal: + default: + return &AFBackgroundImageRequestOperationNormal; + } +} + +- (AFHTTPRequestOperation *)af_backgroundImageRequestOperationForState:(UIControlState)state { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state)); +} + +- (void)af_setBackgroundImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation + forState:(UIControlState)state +{ + objc_setAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIButton (AFNetworking) + ++ (id )sharedImageCache { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: [UIImageView sharedImageCache]; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(nil, nil, cachedImage); + } else { + [self setImage:cachedImage forState:state]; + } + + [self af_setImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setImageRequestOperation:imageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:imageRequestOperation]; + } +} + +#pragma mark - + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url +{ + [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setBackgroundImageForState:(UIControlState)state + withURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSError *error))failure +{ + [self cancelBackgroundImageRequestOperationForState:state]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(nil, nil, cachedImage); + } else { + [self setBackgroundImage:cachedImage forState:state]; + } + + [self af_setBackgroundImageRequestOperation:nil forState:state]; + } else { + if (placeholderImage) { + [self setBackgroundImage:placeholderImage forState:state]; + } + + __weak __typeof(self)weakSelf = self; + AFHTTPRequestOperation *backgroundImageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + backgroundImageRequestOperation.responseSerializer = self.imageResponseSerializer; + [backgroundImageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (success) { + success(operation.request, operation.response, responseObject); + } else if (responseObject) { + [strongSelf setBackgroundImage:responseObject forState:state]; + } + } + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + if ([[urlRequest URL] isEqual:[operation.request URL]]) { + if (failure) { + failure(error); + } + } + }]; + + [self af_setBackgroundImageRequestOperation:backgroundImageRequestOperation forState:state]; + [[[self class] af_sharedImageRequestOperationQueue] addOperation:backgroundImageRequestOperation]; + } +} + +#pragma mark - + +- (void)cancelImageRequestOperationForState:(UIControlState)state { + [[self af_imageRequestOperationForState:state] cancel]; + [self af_setImageRequestOperation:nil forState:state]; +} + +- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state { + [[self af_backgroundImageRequestOperationForState:state] cancel]; + [self af_setBackgroundImageRequestOperation:nil forState:state]; +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.h new file mode 100755 index 0000000..2fdff9f --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.h @@ -0,0 +1,142 @@ +// UIImageView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@protocol AFURLResponseSerialization, AFImageCache; + +/** + This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. + */ +@interface UIImageView (AFNetworking) + +///---------------------------- +/// @name Accessing Image Cache +///---------------------------- + +/** + The image cache used to improve image loading performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly. +*/ ++ (id )sharedImageCache; + +/** + Set the cache used for image loading. + + @param imageCache The image cache. + */ ++ (void)setSharedImageCache:(id )imageCache; + +///------------------------------------ +/// @name Accessing Response Serializer +///------------------------------------ + +/** + The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. + + @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer + */ +@property (nonatomic, strong) id imageResponseSerializer; + +///-------------------- +/// @name Setting Image +///-------------------- + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + */ +- (void)setImageWithURL:(NSURL *)url; + +/** + Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` + + @param url The URL used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + */ +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage; + +/** + Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. + + If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. + + If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. + + @param urlRequest The URL request used for the image request. + @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. + @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the request and response parameters will be `nil`. + @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. + */ +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure; + +/** + Cancels any executing image operation for the receiver, if one exists. + */ +- (void)cancelImageRequestOperation; + +@end + +#pragma mark - + +/** + The `AFImageCache` protocol is adopted by an object used to cache images loaded by the AFNetworking category on `UIImageView`. + */ +@protocol AFImageCache + +/** + Returns a cached image for the specififed request, if available. + + @param request The image request. + + @return The cached image. + */ +- (UIImage *)cachedImageForRequest:(NSURLRequest *)request; + +/** + Caches a particular image for the specified request. + + @param image The image to cache. + @param request The request to be used as a cache key. + */ +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request; +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.m new file mode 100755 index 0000000..1400b4a --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIImageView+AFNetworking.m @@ -0,0 +1,215 @@ +// UIImageView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIImageView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +@interface AFImageCache : NSCache +@end + +#pragma mark - + +@interface UIImageView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; +@end + +@implementation UIImageView (_AFNetworking) + ++ (NSOperationQueue *)af_sharedImageRequestOperationQueue { + static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; + _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; + }); + + return _af_sharedImageRequestOperationQueue; +} + +- (AFHTTPRequestOperation *)af_imageRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); +} + +- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { + objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIImageView (AFNetworking) +@dynamic imageResponseSerializer; + ++ (id )sharedImageCache { + static AFImageCache *_af_defaultImageCache = nil; + static dispatch_once_t oncePredicate; + dispatch_once(&oncePredicate, ^{ + _af_defaultImageCache = [[AFImageCache alloc] init]; + + [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) { + [_af_defaultImageCache removeAllObjects]; + }]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache; +#pragma clang diagnostic pop +} + ++ (void)setSharedImageCache:(id )imageCache { + objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (id )imageResponseSerializer { + static id _af_defaultImageResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setImageResponseSerializer:(id )serializer { + objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)setImageWithURL:(NSURL *)url { + [self setImageWithURL:url placeholderImage:nil]; +} + +- (void)setImageWithURL:(NSURL *)url + placeholderImage:(UIImage *)placeholderImage +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; + + [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; +} + +- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest + placeholderImage:(UIImage *)placeholderImage + success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success + failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure +{ + [self cancelImageRequestOperation]; + + UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; + if (cachedImage) { + if (success) { + success(nil, nil, cachedImage); + } else { + self.image = cachedImage; + } + + self.af_imageRequestOperation = nil; + } else { + if (placeholderImage) { + self.image = placeholderImage; + } + + __weak __typeof(self)weakSelf = self; + self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; + self.af_imageRequestOperation.responseSerializer = self.imageResponseSerializer; + [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (success) { + success(urlRequest, operation.response, responseObject); + } else if (responseObject) { + strongSelf.image = responseObject; + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + + [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { + if (failure) { + failure(urlRequest, operation.response, error); + } + + if (operation == strongSelf.af_imageRequestOperation){ + strongSelf.af_imageRequestOperation = nil; + } + } + }]; + + [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; + } +} + +- (void)cancelImageRequestOperation { + [self.af_imageRequestOperation cancel]; + self.af_imageRequestOperation = nil; +} + +@end + +#pragma mark - + +static inline NSString * AFImageCacheKeyFromURLRequest(NSURLRequest *request) { + return [[request URL] absoluteString]; +} + +@implementation AFImageCache + +- (UIImage *)cachedImageForRequest:(NSURLRequest *)request { + switch ([request cachePolicy]) { + case NSURLRequestReloadIgnoringCacheData: + case NSURLRequestReloadIgnoringLocalAndRemoteCacheData: + return nil; + default: + break; + } + + return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; +} + +- (void)cacheImage:(UIImage *)image + forRequest:(NSURLRequest *)request +{ + if (image && request) { + [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)]; + } +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIKit+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIKit+AFNetworking.h new file mode 100755 index 0000000..94082f6 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIKit+AFNetworking.h @@ -0,0 +1,38 @@ +// UIKit+AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#ifndef _UIKIT_AFNETWORKING_ + #define _UIKIT_AFNETWORKING_ + + #import "AFNetworkActivityIndicatorManager.h" + + #import "UIActivityIndicatorView+AFNetworking.h" + #import "UIAlertView+AFNetworking.h" + #import "UIButton+AFNetworking.h" + #import "UIImageView+AFNetworking.h" + #import "UIKit+AFNetworking.h" + #import "UIProgressView+AFNetworking.h" + #import "UIRefreshControl+AFNetworking.h" + #import "UIWebView+AFNetworking.h" +#endif /* _UIKIT_AFNETWORKING_ */ diff --git a/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.h new file mode 100755 index 0000000..6a4e16f --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.h @@ -0,0 +1,87 @@ +// UIProgressView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation. + */ +@interface UIProgressView (AFNetworking) + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated; +#endif + +/** + Binds the progress to the download progress of the specified session task. + + @param task The session task. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated; +#endif + +///------------------------------------ +/// @name Setting Session Task Progress +///------------------------------------ + +/** + Binds the progress to the upload progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +/** + Binds the progress to the download progress of the specified request operation. + + @param operation The request operation. + @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. + */ +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.m new file mode 100755 index 0000000..ad2c280 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIProgressView+AFNetworking.m @@ -0,0 +1,182 @@ +// UIProgressView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIProgressView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFURLConnectionOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; +static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; + +@interface AFURLConnectionOperation (_UIProgressView) +@property (readwrite, nonatomic, copy) void (^uploadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setUploadProgressAnimated:) BOOL af_uploadProgressAnimated; + +@property (readwrite, nonatomic, copy) void (^downloadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); +@property (readwrite, nonatomic, assign, setter = af_setDownloadProgressAnimated:) BOOL af_downloadProgressAnimated; +@end + +@implementation AFURLConnectionOperation (_UIProgressView) +@dynamic uploadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_uploadProgressAnimated; + +@dynamic downloadProgress; // Implemented in AFURLConnectionOperation +@dynamic af_downloadProgressAnimated; +@end + +#pragma mark - + +@implementation UIProgressView (AFNetworking) + +- (BOOL)af_uploadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; +} + +- (void)af_setUploadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (BOOL)af_downloadProgressAnimated { + return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; +} + +- (void)af_setDownloadProgressAnimated:(BOOL)animated { + objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + [task addObserver:self forKeyPath:@"countOfBytesSent" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; + + [self af_setUploadProgressAnimated:animated]; +} + +- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task + animated:(BOOL)animated +{ + [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + [task addObserver:self forKeyPath:@"countOfBytesReceived" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; + + [self af_setDownloadProgressAnimated:animated]; +} +#endif + +#pragma mark - + +- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) = [operation.uploadProgress copy]; + [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { + if (original) { + original(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToWrite > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesWritten / (totalBytesExpectedToWrite * 1.0f)) animated:animated]; + } + }); + }]; +} + +- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation + animated:(BOOL)animated +{ + __weak __typeof(self)weakSelf = self; + void (^original)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) = [operation.downloadProgress copy]; + [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { + if (original) { + original(bytesRead, totalBytesRead, totalBytesExpectedToRead); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (totalBytesExpectedToRead > 0) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + [strongSelf setProgress:(totalBytesRead / (totalBytesExpectedToRead * 1.0f)) animated:animated]; + } + }); + }]; +} + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(__unused NSDictionary *)change + context:(void *)context +{ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 + if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + if ([object countOfBytesExpectedToSend] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + if ([object countOfBytesExpectedToReceive] > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; + }); + } + } + + if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { + if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { + @try { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; + + if (context == AFTaskCountOfBytesSentContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + } + + if (context == AFTaskCountOfBytesReceivedContext) { + [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + } + } + @catch (NSException * __unused exception) {} + } + } + } +#endif +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h new file mode 100755 index 0000000..18c12ea --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h @@ -0,0 +1,64 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFURLConnectionOperation; + +/** + This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically begining and ending refreshing depending on the loading state of a request operation or session task. + */ +@interface UIRefreshControl (AFNetworking) + +///----------------------------------- +/// @name Refreshing for Session Tasks +///----------------------------------- + +/** + Binds the refreshing state to the state of the specified task. + + @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; +#endif + +///---------------------------------------- +/// @name Refreshing for Request Operations +///---------------------------------------- + +/** + Binds the refreshing state to the execution state of the specified operation. + + @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. + */ +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m new file mode 100755 index 0000000..e266451 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m @@ -0,0 +1,93 @@ +// UIRefreshControl+AFNetworking.m +// +// Copyright (c) 2014 AFNetworking (http://afnetworking.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIRefreshControl+AFNetworking.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#import "AFURLSessionManager.h" +#endif + +@implementation UIRefreshControl (AFNetworking) + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; + + if (task) { + if (task.state == NSURLSessionTaskStateRunning) { + [self beginRefreshing]; + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; + } else { + [self endRefreshing]; + } + } +} +#endif + +- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + + [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; + [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; + + if (operation) { + if (![operation isFinished]) { + if ([operation isExecuting]) { + [self beginRefreshing]; + } else { + [self endRefreshing]; + } + + [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation]; + [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation]; + } + } +} + +#pragma mark - + +- (void)af_beginRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ + [self beginRefreshing]; + }); +} + +- (void)af_endRefreshing { + dispatch_async(dispatch_get_main_queue(), ^{ + [self endRefreshing]; + }); +} + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.h b/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.h new file mode 100755 index 0000000..56e5832 --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.h @@ -0,0 +1,82 @@ +// UIWebView+AFNetworking.h +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import + +@class AFHTTPRequestSerializer, AFHTTPResponseSerializer; +@protocol AFURLRequestSerialization, AFURLResponseSerialization; + +/** + This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. + + @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. + */ +@interface UIWebView (AFNetworking) + +/** + The request serializer used to serialize requests made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPRequestSerializer`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + The response serializer used to serialize responses made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPResponseSerializer`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +/** + Asynchronously loads the specified request. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(void (^)(NSError *error))failure; + +/** + Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. + @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. + @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. + @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. + @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(NSString *)MIMEType + textEncodingName:(NSString *)textEncodingName + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(void (^)(NSError *error))failure; + +@end + +#endif diff --git a/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.m b/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.m new file mode 100755 index 0000000..93eacaa --- /dev/null +++ b/AFNetworking-master/UIKit+AFNetworking/UIWebView+AFNetworking.m @@ -0,0 +1,159 @@ +// UIWebView+AFNetworking.m +// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "UIWebView+AFNetworking.h" + +#import + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + +#import "AFHTTPRequestOperation.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" + +@interface UIWebView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setHTTPRequestOperation:) AFHTTPRequestOperation *af_HTTPRequestOperation; +@end + +@implementation UIWebView (_AFNetworking) + +- (AFHTTPRequestOperation *)af_HTTPRequestOperation { + return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_HTTPRequestOperation)); +} + +- (void)af_setHTTPRequestOperation:(AFHTTPRequestOperation *)operation { + objc_setAssociatedObject(self, @selector(af_HTTPRequestOperation), operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation UIWebView (AFNetworking) + +- (AFHTTPRequestSerializer *)requestSerializer { + static AFHTTPRequestSerializer *_af_defaultRequestSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultRequestSerializer = [AFHTTPRequestSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(requestSerializer)) ?: _af_defaultRequestSerializer; +#pragma clang diagnostic pop +} + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + objc_setAssociatedObject(self, @selector(requestSerializer), requestSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (AFHTTPResponseSerializer *)responseSerializer { + static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; + }); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; +#pragma clang diagnostic pop +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)loadRequest:(NSURLRequest *)request + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(void (^)(NSError *error))failure +{ + [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (success) { + string = success(response, string); + } + + return [string dataUsingEncoding:stringEncoding]; + } failure:failure]; +} + +- (void)loadRequest:(NSURLRequest *)request + MIMEType:(NSString *)MIMEType + textEncodingName:(NSString *)textEncodingName + progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress + success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(void (^)(NSError *error))failure +{ + NSParameterAssert(request); + + if (self.af_HTTPRequestOperation) { + [self.af_HTTPRequestOperation cancel]; + } + + request = [self.requestSerializer requestBySerializingRequest:request withParameters:nil error:nil]; + + self.af_HTTPRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + self.af_HTTPRequestOperation.responseSerializer = self.responseSerializer; + + __weak __typeof(self)weakSelf = self; + [self.af_HTTPRequestOperation setDownloadProgressBlock:progress]; + [self.af_HTTPRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id __unused responseObject) { + NSData *data = success ? success(operation.response, operation.responseData) : operation.responseData; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu" + __strong __typeof(weakSelf) strongSelf = weakSelf; + [strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]]; + + if ([strongSelf.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [strongSelf.delegate webViewDidFinishLoad:strongSelf]; + } + +#pragma clang diagnostic pop + } failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) { + if (failure) { + failure(error); + } + }]; + + [self.af_HTTPRequestOperation start]; + + if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { + [self.delegate webViewDidStartLoad:self]; + } +} + +@end + +#endif diff --git a/AdDataModel.h b/AdDataModel.h new file mode 100644 index 0000000..f509d91 --- /dev/null +++ b/AdDataModel.h @@ -0,0 +1,24 @@ +// +// AdDataModel.h +// 广告循环滚动效果 +// +// Created by QzydeMac on 14/12/20. +// Copyright (c) 2014年 Qzy. All rights reserved. +// + +#import + +@interface AdDataModel : NSObject + +@property (retain,nonatomic,readonly) NSArray * imageNameArray; +@property (retain,nonatomic,readonly) NSArray * adTitleArray; + +- (instancetype)initWithImageName; +- (instancetype)initWithImageNameAndAdTitleArray; ++ (id)adDataModelWithImageName; ++ (id)adDataModelWithImageNameAndAdTitleArray; +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/AdDataModel.m b/AdDataModel.m new file mode 100644 index 0000000..9b5731d --- /dev/null +++ b/AdDataModel.m @@ -0,0 +1,47 @@ +// +// AdDataModel.m +// 广告循环滚动效果 +// +// Created by QzydeMac on 14/12/20. +// Copyright (c) 2014年 Qzy. All rights reserved. +// + +#import "AdDataModel.h" + +#define PLISTFILENAME @"AdDataPlist.plist" + +#define PATH [[NSBundle mainBundle]pathForResource:PLISTFILENAME ofType:nil] + +@implementation AdDataModel + +- (instancetype)initWithImageName +{ + self = [super init]; + if (self) + { + _imageNameArray = [NSArray arrayWithContentsOfFile:PATH][0]; + } + return self; +} + +- (instancetype)initWithImageNameAndAdTitleArray +{ + _adTitleArray = [NSArray arrayWithContentsOfFile:PATH][1]; + + return [self initWithImageName]; +} + ++ (id)adDataModelWithImageName +{ + return [[self alloc]initWithImageName]; +} + ++ (id)adDataModelWithImageNameAndAdTitleArray +{ + return [[self alloc]initWithImageNameAndAdTitleArray]; +} +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/AdDataPlist.plist b/AdDataPlist.plist new file mode 100644 index 0000000..ee37378 --- /dev/null +++ b/AdDataPlist.plist @@ -0,0 +1,18 @@ + + + + + + image3.png + image0.png + image1.png + image2.png + + + 魅力风景流水 + 远景小桥 + 近景小桥 + 夕阳无限好,只是进黄昏 + + + diff --git a/AdScrollView.h b/AdScrollView.h new file mode 100644 index 0000000..4900e35 --- /dev/null +++ b/AdScrollView.h @@ -0,0 +1,40 @@ +// +// AdScrollView.h +// 广告循环滚动效果 +// +// Created by QzydeMac on 14/12/20. +// Copyright (c) 2014年 Qzy. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, UIPageControlShowStyle) +{ + UIPageControlShowStyleNone,//default + UIPageControlShowStyleLeft, + UIPageControlShowStyleCenter, + UIPageControlShowStyleRight, +}; + +typedef NS_ENUM(NSUInteger, AdTitleShowStyle) +{ + AdTitleShowStyleNone, + AdTitleShowStyleLeft, + AdTitleShowStyleCenter, + AdTitleShowStyleRight, +}; + +@interface AdScrollView : UIScrollView + +@property (retain,nonatomic,readonly) UIPageControl * pageControl; +@property (retain,nonatomic,readwrite) NSArray * imageNameArray; + +@property (assign,nonatomic,readwrite) UIPageControlShowStyle PageControlShowStyle; +@property (assign,nonatomic,readonly) AdTitleShowStyle adTitleStyle; + + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/AdScrollView.m b/AdScrollView.m new file mode 100644 index 0000000..90091db --- /dev/null +++ b/AdScrollView.m @@ -0,0 +1,173 @@ +// +// AdScrollView.m +// 广告循环滚动效果 +// +// Created by QzydeMac on 14/12/20. +// Copyright (c) 2014年 Qzy. All rights reserved. +// + +#import "AdScrollView.h" + +#define UISCREENWIDTH self.bounds.size.width//广告的宽度 +#define UISCREENHEIGHT self.bounds.size.height//广告的高度 +#define HIGHT self.bounds.origin.y //由于_pageControl是添加进父视图的,所以实际位置要参考,滚动视图的y坐标 + +static CGFloat const chageImageTime = 3.0; +static NSUInteger currentImage = 1;//记录中间图片的下标,开始总是为1 + +@interface AdScrollView () + +{ + //广告的label + UILabel * _adLabel; + //循环滚动的三个视图 + UIImageView * _leftImageView; + UIImageView * _centerImageView; + UIImageView * _rightImageView; + //循环滚动的周期时间 + NSTimer * _moveTime; + //用于确定滚动式由人导致的还是计时器到了,系统帮我们滚动的,YES,则为系统滚动,NO则为客户滚动(ps.在客户端中客户滚动一个广告后,这个广告的计时器要归0并重新计时) + BOOL _isTimeUp; + //为每一个图片添加一个广告语(可选) + UILabel * _leftAdLabel; + UILabel * _centerAdLabel; + UILabel * _rightAdLabel; +} + +@property (retain,nonatomic,readonly) UIImageView * leftImageView; +@property (retain,nonatomic,readonly) UIImageView * centerImageView; +@property (retain,nonatomic,readonly) UIImageView * rightImageView; + +@end + +@implementation AdScrollView + +#pragma mark - 自由指定广告所占的frame +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.bounces = NO; + + self.showsHorizontalScrollIndicator = NO; + self.showsVerticalScrollIndicator = NO; + self.pagingEnabled = YES; + self.contentOffset = CGPointMake(UISCREENWIDTH, 0); + self.contentSize = CGSizeMake(UISCREENWIDTH * 3, UISCREENHEIGHT); + self.delegate = self; + + + + _leftImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, UISCREENWIDTH, UISCREENHEIGHT)]; + [self addSubview:_leftImageView]; + _centerImageView = [[UIImageView alloc]initWithFrame:CGRectMake(UISCREENWIDTH, 0, UISCREENWIDTH, UISCREENHEIGHT)]; + [self addSubview:_centerImageView]; + _rightImageView = [[UIImageView alloc]initWithFrame:CGRectMake(UISCREENWIDTH*2, 0, UISCREENWIDTH, UISCREENHEIGHT)]; + [self addSubview:_rightImageView]; + + _moveTime = [NSTimer scheduledTimerWithTimeInterval:chageImageTime target:self selector:@selector(animalMoveImage) userInfo:nil repeats:YES]; + _isTimeUp = NO; + + } + return self; +} + +#pragma mark - 设置广告所使用的图片(名字) +- (void)setImageNameArray:(NSArray *)imageNameArray +{ + _imageNameArray = imageNameArray; + + _leftImageView.image = [UIImage imageNamed:_imageNameArray[0]]; + _centerImageView.image = [UIImage imageNamed:_imageNameArray[1]]; + _rightImageView.image = [UIImage imageNamed:_imageNameArray[2]]; +} + + + +#pragma mark - 创建pageControl,指定其显示样式 +- (void)setPageControlShowStyle:(UIPageControlShowStyle)PageControlShowStyle +{ + if (PageControlShowStyle == UIPageControlShowStyleNone) { + return; + } + _pageControl = [[UIPageControl alloc]init]; + _pageControl.numberOfPages = _imageNameArray.count; + + if (PageControlShowStyle == UIPageControlShowStyleLeft) + { + _pageControl.frame = CGRectMake(10, HIGHT+UISCREENHEIGHT - 20, 20*_pageControl.numberOfPages, 20); + } + else if (PageControlShowStyle == UIPageControlShowStyleCenter) + { + _pageControl.frame = CGRectMake(0, 0, 20*_pageControl.numberOfPages, 20); + _pageControl.center = CGPointMake(UISCREENWIDTH/2.0, HIGHT+UISCREENHEIGHT - 10); + } + else + { + _pageControl.frame = CGRectMake( UISCREENWIDTH - 20*_pageControl.numberOfPages, HIGHT+UISCREENHEIGHT - 20, 20*_pageControl.numberOfPages, 20); + } + _pageControl.currentPage = 0; + + _pageControl.enabled = NO; + + [self performSelector:@selector(addPageControl) withObject:nil afterDelay:0.1f]; +} +//由于PageControl这个空间必须要添加在滚动视图的父视图上(添加在滚动视图上的话会随着图片滚动,而达不到效果) +- (void)addPageControl +{ + [[self superview] addSubview:_pageControl]; +} + +#pragma mark - 计时器到时,系统滚动图片 +- (void)animalMoveImage +{ + + [self setContentOffset:CGPointMake(UISCREENWIDTH * 2, 0) animated:YES]; + _isTimeUp = YES; + [NSTimer scheduledTimerWithTimeInterval:0.4f target:self selector:@selector(scrollViewDidEndDecelerating:) userInfo:nil repeats:NO]; +} + +#pragma mark - 图片停止时,调用该函数使得滚动视图复用 +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView +{ + if (self.contentOffset.x == 0) + { + currentImage = (currentImage-1)%_imageNameArray.count; + _pageControl.currentPage = (_pageControl.currentPage - 1)%_imageNameArray.count; + } + else if(self.contentOffset.x == UISCREENWIDTH * 2) + { + + currentImage = (currentImage+1)%_imageNameArray.count; + _pageControl.currentPage = (_pageControl.currentPage + 1)%_imageNameArray.count; + } + else + { + return; + } + + _leftImageView.image = [UIImage imageNamed:_imageNameArray[(currentImage-1)%_imageNameArray.count]]; + + + + _centerImageView.image = [UIImage imageNamed:_imageNameArray[currentImage%_imageNameArray.count]]; + + + + _rightImageView.image = [UIImage imageNamed:_imageNameArray[(currentImage+1)%_imageNameArray.count]]; + + + self.contentOffset = CGPointMake(UISCREENWIDTH, 0); + + //手动控制图片滚动应该取消那个三秒的计时器 + if (!_isTimeUp) { + [_moveTime setFireDate:[NSDate dateWithTimeIntervalSinceNow:chageImageTime]]; + } + _isTimeUp = NO; +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/ArtistsCell.h b/ArtistsCell.h new file mode 100755 index 0000000..fd2bca1 --- /dev/null +++ b/ArtistsCell.h @@ -0,0 +1,16 @@ +// +// ArtistsCell.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface ArtistsCell : UITableViewCell + +@property (nonatomic, strong) IBOutlet UIImageView *artWorkImageView; +@property (nonatomic, strong) IBOutlet UILabel *artisttNameLabel; + +@end diff --git a/ArtistsCell.m b/ArtistsCell.m new file mode 100755 index 0000000..cccfc4d --- /dev/null +++ b/ArtistsCell.m @@ -0,0 +1,23 @@ +// +// ArtistsCell.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "ArtistsCell.h" + +@implementation ArtistsCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ArtistsCell.xib b/ArtistsCell.xib new file mode 100755 index 0000000..d0a566e --- /dev/null +++ b/ArtistsCell.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ArtistsViewController.h b/ArtistsViewController.h new file mode 100755 index 0000000..97c7d56 --- /dev/null +++ b/ArtistsViewController.h @@ -0,0 +1,13 @@ +// +// ArtistsViewController.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface ArtistsViewController : UITableViewController + +@end diff --git a/ArtistsViewController.m b/ArtistsViewController.m new file mode 100755 index 0000000..6610786 --- /dev/null +++ b/ArtistsViewController.m @@ -0,0 +1,77 @@ +// +// ArtistsViewController.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "ArtistsViewController.h" +#import "ArtistsCell.h" +#import "DetailViewController.h" + +@interface ArtistsViewController () + +@property (nonatomic, strong) NSMutableArray *artistsArray; + +@end + +@implementation ArtistsViewController + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + NSLog(@"ArtistsViewController viewWillAppear"); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + _artistsArray = [@[@"test1", + @"test2", + @"test3", + @"test4", + @"test5", + @"test6" + ] mutableCopy]; + + [self.tableView registerNib:[UINib nibWithNibName:@"ArtistsCell" bundle:nil] forCellReuseIdentifier:@"ArtistsCell"]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return _artistsArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"ArtistsCell"; + ArtistsCell *cell = (ArtistsCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + + cell.artWorkImageView.image = [UIImage imageNamed:_artistsArray[indexPath.row]]; + cell.artisttNameLabel.text = [NSString stringWithFormat:@"好文推的内容 %ld",(long)indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + DetailViewController *detailVC = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil]; + [self.navigationController pushViewController:detailVC animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 60; +} + +@end diff --git a/ArtistsViewController.xib b/ArtistsViewController.xib new file mode 100755 index 0000000..caa95ee --- /dev/null +++ b/ArtistsViewController.xib @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CNPPopupController.h b/CNPPopupController.h new file mode 100755 index 0000000..43335b8 --- /dev/null +++ b/CNPPopupController.h @@ -0,0 +1,126 @@ +// 弹出菜单(用来显示登录消息,有下面,中间,全频三种方式)的申明 +// +// CNPPopupController.h +// CNPPopupController +// +// +// Copyright (c) 2015 Jackson. +// + + +#import +#import "SRMonthPicker.h" + + + +@protocol CNPPopupControllerDelegate; + + + +@class CNPPopupTheme, CNPPopupButtonItem; + +@interface CNPPopupController : NSObject{ + /** + * 标题 + */ + UILabel *title1; + UIDatePicker *datepicker; + SRMonthPicker *pickMonth; + + +} + +@property int flag; +@property (nonatomic, strong) NSString *text; +@property (nonatomic, strong) NSAttributedString *popupTitle; +@property (nonatomic, strong) NSArray *contents; +@property (nonatomic, strong) NSArray *buttonItems; +@property (nonatomic, strong) CNPPopupButtonItem *destructiveButtonItem; +@property (nonatomic, strong) CNPPopupTheme *theme; + +@property (nonatomic, weak) id delegate; + +- (instancetype)initWithTitle:(NSString*)text + flag:(int)flag + buttonItems:(NSArray *)buttonItems + destructiveButtonItem:(CNPPopupButtonItem *)destructiveButtonItem; + +- (instancetype)initWithTitle:(NSAttributedString *)popupTitle + contents:(NSArray *)contents + buttonItems:(NSArray *)buttonItems + destructiveButtonItem:(CNPPopupButtonItem *)destructiveButtonItem; + +- (void)presentPopupControllerAnimated:(BOOL)flag; +- (void)dismissPopupControllerAnimated:(BOOL)flag; + +@end + +@protocol CNPPopupControllerDelegate + +@optional + +-(void)didSelect:(NSString*)timestring; +-(void)didSelect1:(NSString *)timestring; +-(void)didSelect2:(NSString *)timestring; +- (void)popupControllerWillPresent:(CNPPopupController *)controller; +- (void)popupControllerDidPresent:(CNPPopupController *)controller; +- (void)popupController:(CNPPopupController *)controller willDismissWithButtonTitle:(NSString *)title; +- (void)popupController:(CNPPopupController *)controller didDismissWithButtonTitle:(NSString *)title; + +@end + +// CNPPopupStyle: Controls how the popup looks once presented +typedef NS_ENUM(NSUInteger, CNPPopupStyle) { + CNPPopupStyleActionSheet = 0, // Displays the popup similar to an action sheet from the bottom. + CNPPopupStyleCentered, // Displays the popup in the center of the screen. + CNPPopupStyleFullscreen // Displays the popup similar to a fullscreen viewcontroller. +}; + +// CNPPopupPresentationStyle: Controls how the popup is presented +typedef NS_ENUM(NSInteger, CNPPopupPresentationStyle) { + CNPPopupPresentationStyleFadeIn = 0, + CNPPopupPresentationStyleSlideInFromTop, + CNPPopupPresentationStyleSlideInFromBottom, + CNPPopupPresentationStyleSlideInFromLeft, + CNPPopupPresentationStyleSlideInFromRight +}; + +// CNPPopupMaskType +typedef NS_ENUM(NSInteger, CNPPopupMaskType) { + CNPPopupMaskTypeNone = 0, // Allow interaction with underlying views. + CNPPopupMaskTypeClear, // Don't allow interaction with underlying views. + CNPPopupMaskTypeDimmed, // Don't allow interaction with underlying views, dim background. +}; + +typedef void(^SelectionHandler) (CNPPopupButtonItem *item); + +@interface CNPPopupButtonItem : NSObject + +@property (nonatomic, strong) NSAttributedString *buttonTitle; +@property (nonatomic, strong) UIColor *backgroundColor; +@property (nonatomic, strong) UIColor *borderColor; +@property (nonatomic, assign) CGFloat borderWidth; +@property (nonatomic, assign) CGFloat cornerRadius; +@property (nonatomic, assign) CGFloat buttonHeight; +@property (nonatomic, strong) SelectionHandler selectionHandler; + ++ (CNPPopupButtonItem *)defaultButtonItemWithTitle:(NSAttributedString *)title backgroundColor:(UIColor *)color; + +@end + +@interface CNPPopupTheme : NSObject + +@property (nonatomic, strong) UIColor *backgroundColor; // Background color of the popup content view (Default white) +@property (nonatomic, assign) CGFloat cornerRadius; // Corner radius of the popup content view (Default 6.0) +@property (nonatomic, assign) UIEdgeInsets popupContentInsets; // Inset of labels, images and buttons on the popup content view (Default 16.0 on all sides) +@property (nonatomic, assign) CNPPopupStyle popupStyle; // How the popup looks once presented (Default centered) +@property (nonatomic, assign) CNPPopupPresentationStyle presentationStyle; // How the popup is presented (Defauly slide in from bottom) +@property (nonatomic, assign) BOOL dismissesOppositeDirection; // If presented from a direction, should it dismiss in the opposite? (Defaults to NO. i.e. Goes back the way it came in) +@property (nonatomic, assign) CNPPopupMaskType maskType; // Backgound mask of the popup (Default dimmed) +@property (nonatomic, assign) BOOL shouldDismissOnBackgroundTouch; // Popup should dismiss on tapping on background mask (Default yes) +@property (nonatomic, assign) CGFloat contentVerticalPadding; // Spacing between each vertical element (Default 12.0) + +// Factory method to help build a default theme ++ (CNPPopupTheme *)defaultTheme; + +@end diff --git a/CNPPopupController.m b/CNPPopupController.m new file mode 100755 index 0000000..18dce1c --- /dev/null +++ b/CNPPopupController.m @@ -0,0 +1,680 @@ +// 弹出菜单的具体实现 +// +// CNPPopupController.m +// CNPPopupController +// +// +// Copyright (c) 2015 Jackson. +// + +#import "CNPPopupController.h" +#import +#define CNP_IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width +#define CNP_SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) +#define CNP_IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) + +typedef struct { + CGFloat top; + CGFloat bottom; +} CNPTopBottomPadding; + +extern CNPTopBottomPadding CNPTopBottomPaddingMake(CGFloat top, CGFloat bottom) { + CNPTopBottomPadding padding; + padding.top = top; + padding.bottom = bottom; + return padding; +}; + +@interface CNPPopupButton : UIButton + +@property (nonatomic, strong) CNPPopupButtonItem *item; + +@end + +@interface CNPPopupController () + +@property (nonatomic, strong) UIView *maskView; +@property (nonatomic, strong) UIView *contentView; +@property (nonatomic, strong) UIWindow *applicationKeyWindow; + +@property (nonatomic, strong) NSLayoutConstraint *contentViewCenterXConstraint; +@property (nonatomic, strong) NSLayoutConstraint *contentViewCenterYConstraint; +@property (nonatomic, strong) NSLayoutConstraint *contentViewWidth; +@property (nonatomic, strong) NSLayoutConstraint *contentViewHeight; +@property (nonatomic, strong) NSLayoutConstraint *contentViewBottom; + +@end + +@implementation CNPPopupController +- (instancetype)initWithTitle:(NSString*)text + flag:(int)flag + buttonItems:(NSArray *)buttonItems + destructiveButtonItem:(CNPPopupButtonItem *)destructiveButtonItem { + _text = text; + _flag = flag; + self = [super init]; + if (self) { + + datepicker=[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 30, 120, 200)]; + datepicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]; + /** + * 年月日显示 + */ + datepicker.datePickerMode = UIDatePickerModeDate; + + //datepicker.datePickerMode = UIDatePickerModeTime; + datepicker.backgroundColor=[UIColor whiteColor]; + NSDate *defaulDate=[NSDate dateWithTimeIntervalSinceNow:9000000]; + [datepicker setDate:defaulDate]; + datepicker.frame=CGRectMake(0, 30, ScreenWidth, 200); + + + + + + _buttonItems = buttonItems; + _destructiveButtonItem = destructiveButtonItem; + + + if (buttonItems) { + } + + // Window setup + NSEnumerator *frontToBackWindows = [[[UIApplication sharedApplication] windows] reverseObjectEnumerator]; + for (UIWindow *window in frontToBackWindows) { + if (window.windowLevel == UIWindowLevelNormal) { + self.applicationKeyWindow = window; + break; + } + } + + if (CNP_SYSTEM_VERSION_LESS_THAN(@"8.0")) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; + } + } + return self; +} + +- (instancetype)initWithTitle:(NSAttributedString *)popupTitle + contents:(NSArray *)contents + buttonItems:(NSArray *)buttonItems + destructiveButtonItem:(CNPPopupButtonItem *)destructiveButtonItem { + self = [super init]; + if (self) { + _popupTitle = popupTitle; + _contents = contents; + _buttonItems = buttonItems; + _destructiveButtonItem = destructiveButtonItem; + + + // Window setup + NSEnumerator *frontToBackWindows = [[[UIApplication sharedApplication] windows] reverseObjectEnumerator]; + for (UIWindow *window in frontToBackWindows) { + if (window.windowLevel == UIWindowLevelNormal) { + self.applicationKeyWindow = window; + break; + } + } + + if (CNP_SYSTEM_VERSION_LESS_THAN(@"8.0")) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameOrOrientationChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; + } + } + return self; +} + +-(void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Touch Handling + +- (void)setUpPopup { + + // Set up mask view + self.maskView = [[UIView alloc] init]; + [self.maskView setTranslatesAutoresizingMaskIntoConstraints:NO]; + self.maskView.alpha = 0.0; + + [self.applicationKeyWindow addSubview:self.maskView]; + [self.applicationKeyWindow addConstraint:[NSLayoutConstraint constraintWithItem:self.maskView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.applicationKeyWindow attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]]; + [self.applicationKeyWindow addConstraint:[NSLayoutConstraint constraintWithItem:self.maskView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.applicationKeyWindow attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]]; + [self.applicationKeyWindow addConstraint:[NSLayoutConstraint constraintWithItem:self.maskView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.applicationKeyWindow attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]]; + [self.applicationKeyWindow addConstraint:[NSLayoutConstraint constraintWithItem:self.maskView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.applicationKeyWindow attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; + + if (self.theme.popupStyle == CNPPopupStyleFullscreen) { + self.maskView.backgroundColor = [UIColor whiteColor]; + } + else { + if (self.theme.maskType == CNPPopupMaskTypeDimmed) { + self.maskView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.5f]; + } else { + self.maskView.backgroundColor = [UIColor clearColor]; + } + } + + self.contentView = [[UIView alloc] init]; + [self.contentView setTranslatesAutoresizingMaskIntoConstraints:NO]; + self.contentView.clipsToBounds = YES; + self.contentView.backgroundColor = self.theme.backgroundColor; + self.contentView.layer.cornerRadius = self.theme.popupStyle == CNPPopupStyleCentered ? self.theme.cornerRadius : 0.0f; + [self.maskView addSubview:self.contentView]; + + if (_flag == 1 || _flag == 2 || _flag == 3 || _flag == 4 ||_flag == 0 || _flag ==9) { + title1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, 30)]; + [title1 setText:_text]; + title1.font = [UIFont systemFontOfSize:18]; + [title1 setTextAlignment:NSTextAlignmentLeft]; + [title1 setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title1 setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + [self.contentView addSubview:title1]; + + [self.contentView addSubview:datepicker]; + + } + + + + if (self.popupTitle) { + UILabel *title = [self multilineLabelWithAttributedString:self.popupTitle]; + [self.contentView addSubview:title]; + } + + if (self.contents) { + for (NSObject *content in self.contents) { + if ([content isKindOfClass:[NSAttributedString class]]) { + UILabel *label = [self multilineLabelWithAttributedString:(NSAttributedString *)content]; + [self.contentView addSubview:label]; + } + else if ([content isKindOfClass:[UIImage class]]) { + UIImageView *imageView = [self centeredImageViewForImage:(UIImage *)content]; + [imageView sizeToFit]; + [self.contentView addSubview:imageView]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual toItem:imageView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; + } + } + } + + if (self.buttonItems) { + for (CNPPopupButtonItem *item in self.buttonItems) { + CNPPopupButton *button = [self buttonItem:item]; + [self.contentView addSubview:button]; + if ([button.titleLabel.text isEqualToString:@"保存"]) { + [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + } + } + + [self.contentView.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { + if (idx == 0) { + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:self.theme.popupContentInsets.top]]; + } + else { + UIView *previousSubView = [self.contentView.subviews objectAtIndex:idx - 1]; + if (previousSubView) { + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousSubView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:self.theme.contentVerticalPadding]]; + } + } + + if (idx == self.contentView.subviews.count - 1) { + + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-(self.theme.popupContentInsets.bottom + (self.destructiveButtonItem ? self.destructiveButtonItem.buttonHeight : 0.0f))]]; + } + + if ([view isKindOfClass:[UIButton class]]) { + CNPPopupButton *button = (CNPPopupButton *)view; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:button.item.buttonHeight]]; + [button addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; + } + + [view setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; + [view setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal]; + + if ([view isKindOfClass:[UIImageView class]]) { + [view setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal]; + [view setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisVertical]; + } + else { + [view setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal]; + [view setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; + } + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:self.theme.popupContentInsets.left]]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:-self.theme.popupContentInsets.right]]; + }]; + + if (self.destructiveButtonItem) { + CNPPopupButton *destructiveButton = [self buttonItem:self.destructiveButtonItem]; + [self.contentView addSubview:destructiveButton]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:destructiveButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:self.destructiveButtonItem.buttonHeight]]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:destructiveButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:destructiveButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]]; + [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:destructiveButton attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; + [destructiveButton addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; + } + + [self.maskView addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual toItem:self.maskView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]]; + [self.maskView addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationLessThanOrEqual toItem:self.maskView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]]; + + if (self.theme.popupStyle == CNPPopupStyleFullscreen) { + self.contentViewWidth = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeWidth multiplier:CNP_IS_IPAD?0.5:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewWidth]; + self.contentViewCenterYConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewCenterYConstraint]; + self.contentViewCenterXConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewCenterXConstraint]; + } + else if (self.theme.popupStyle == CNPPopupStyleActionSheet) { + self.contentViewHeight = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeWidth multiplier:CNP_IS_IPAD?0.5:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewHeight]; + self.contentViewBottom = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewBottom]; + self.contentViewCenterXConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewCenterXConstraint]; + } + else { + if (CNP_IS_IPAD) { + self.contentViewWidth = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeWidth multiplier:0.4 constant:0]; + } + else { + self.contentViewWidth = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:-40]; + } + [self.maskView addConstraint:self.contentViewWidth]; + self.contentViewCenterYConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewCenterYConstraint]; + self.contentViewCenterXConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.maskView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; + [self.maskView addConstraint:self.contentViewCenterXConstraint]; + } + +} +- (NSString*)formatDate:(NSDate *)date +{ + // A convenience method that formats the date in Month-Year format + + NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"MMMM y"; + return [formatter stringFromDate:date]; +} +-(IBAction)buttonClicked:(id)sender + +{ + NSDate *selected = [datepicker date]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + if (_flag == 1) { + [dateFormatter setDateFormat:@"yyyy-MM-dd"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect:)]){ + [_delegate didSelect:destDateString]; + return; + } + + }if (_flag == 2) { + [dateFormatter setDateFormat:@"yyyy-MM"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect:)]){ + [_delegate didSelect:destDateString]; + return; + } + }else if(_flag == 3){ + [dateFormatter setDateFormat:@"yyyy"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect:)]){ + [_delegate didSelect:destDateString]; + return; + } + }else if (_flag == 0){ + [dateFormatter setDateFormat:@"yyyy-MM"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect1:)]){ + [_delegate didSelect1:destDateString]; + return; + } + + }else if (_flag == 9){ + [dateFormatter setDateFormat:@"yyyy"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect2:)]){ + [_delegate didSelect2:destDateString]; + return; + } + + } + else{ + /** + * 年月日输出 + */ + [dateFormatter setDateFormat:@"HH:mm"]; + + //[dateFormatter setDateFormat:@"HH:mm"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + NSLog(@"%@",destDateString); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect:)]){ + [_delegate didSelect:destDateString]; + return; + } + + + } + + + +} + +- (void)actionButtonPressed:(CNPPopupButton *)sender { + if (sender.item.selectionHandler) { + sender.item.selectionHandler(sender.item); + } + [self dismissPopupControllerAnimated:YES withButtonTitle:[sender attributedTitleForState:UIControlStateNormal].string]; +} + +#pragma mark - Presentation + +- (void)presentPopupControllerAnimated:(BOOL)flag { + + + // Safety Checks + NSAssert(self.theme!=nil,@"You must set a theme. You can use [CNPTheme defaultTheme] as a starting place"); + [self setUpPopup]; + if (CNP_SYSTEM_VERSION_LESS_THAN(@"8.0")) { + [self rotateAccordingToStatusBarOrientationAndSupportedOrientations]; + } + [self setDismissedConstraints]; + [self.maskView needsUpdateConstraints]; + [self.maskView layoutIfNeeded]; + [self setPresentedConstraints]; + + if ([self.delegate respondsToSelector:@selector(popupControllerWillPresent:)]) { + [self.delegate popupControllerWillPresent:self]; + } + + [UIView animateWithDuration:flag ? 0.3f : 0.0f + delay:0 + options:UIViewAnimationOptionCurveEaseInOut + animations:^{ + self.maskView.alpha = 1.0f; + [self.maskView needsUpdateConstraints]; + [self.maskView layoutIfNeeded]; + } + completion:^(BOOL finished) { + if ([self.delegate respondsToSelector:@selector(popupControllerDidPresent:)]) { + [self.delegate popupControllerDidPresent:self]; + } + }]; +} + +- (void)dismissPopupControllerAnimated:(BOOL)flag { + [self dismissPopupControllerAnimated:flag withButtonTitle:nil]; +} + +- (void)dismissPopupControllerAnimated:(BOOL)flag withButtonTitle:(NSString *)title { + + if (self.theme.dismissesOppositeDirection) { + [self setDismissedConstraints]; + } else { + [self setOriginConstraints]; + } + + if ([self.delegate respondsToSelector:@selector(popupController:willDismissWithButtonTitle:)]) { + [self.delegate popupController:self willDismissWithButtonTitle:title]; + } + + [UIView animateWithDuration:flag ? 0.3f : 0.0f + delay:0 + options:UIViewAnimationOptionCurveEaseInOut + animations:^{ + self.maskView.alpha = 0.0f; + [self.maskView needsUpdateConstraints]; + [self.maskView layoutIfNeeded]; + } + completion:^(BOOL finished) { + [self.maskView removeFromSuperview]; + self.maskView = nil; + self.contentView = nil; + if ([self.delegate respondsToSelector:@selector(popupController:didDismissWithButtonTitle:)]) { + [self.delegate popupController:self didDismissWithButtonTitle:title]; + } + }]; +} + +- (void)setOriginConstraints { + + if (self.theme.popupStyle == CNPPopupStyleCentered) { + switch (self.theme.presentationStyle) { + case CNPPopupPresentationStyleFadeIn: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromTop: + self.contentViewCenterYConstraint.constant = -self.applicationKeyWindow.bounds.size.height; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromBottom: + self.contentViewCenterYConstraint.constant = self.applicationKeyWindow.bounds.size.height; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromLeft: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = -self.applicationKeyWindow.bounds.size.height; + break; + case CNPPopupPresentationStyleSlideInFromRight: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = self.applicationKeyWindow.bounds.size.height; + break; + default: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = 0; + break; + } + } + else if (self.theme.popupStyle == CNPPopupStyleActionSheet) { + self.contentViewBottom.constant = self.applicationKeyWindow.bounds.size.height; + } +} + +- (void)setDismissedConstraints { + + if (self.theme.popupStyle == CNPPopupStyleCentered) { + switch (self.theme.presentationStyle) { + case CNPPopupPresentationStyleFadeIn: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromTop: + self.contentViewCenterYConstraint.constant = self.applicationKeyWindow.bounds.size.height; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromBottom: + self.contentViewCenterYConstraint.constant = -self.applicationKeyWindow.bounds.size.height; + self.contentViewCenterXConstraint.constant = 0; + break; + case CNPPopupPresentationStyleSlideInFromLeft: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = self.applicationKeyWindow.bounds.size.height; + break; + case CNPPopupPresentationStyleSlideInFromRight: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = -self.applicationKeyWindow.bounds.size.height; + break; + default: + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = 0; + break; + } + } + else if (self.theme.popupStyle == CNPPopupStyleActionSheet) { + self.contentViewBottom.constant = self.applicationKeyWindow.bounds.size.height; + } +} + +- (void)setPresentedConstraints { + + if (self.theme.popupStyle == CNPPopupStyleCentered) { + self.contentViewCenterYConstraint.constant = 0; + self.contentViewCenterXConstraint.constant = 0; + } + else if (self.theme.popupStyle == CNPPopupStyleActionSheet) { + self.contentViewBottom.constant = 0; + } +} + +#pragma mark - Window Handling + +- (void)statusBarFrameOrOrientationChanged:(NSNotification *)notification +{ + [self rotateAccordingToStatusBarOrientationAndSupportedOrientations]; +} + +- (void)rotateAccordingToStatusBarOrientationAndSupportedOrientations +{ + UIInterfaceOrientation statusBarOrientation = [UIApplication sharedApplication].statusBarOrientation; + CGFloat angle = UIInterfaceOrientationAngleOfOrientation(statusBarOrientation); + CGFloat statusBarHeight = [self getStatusBarHeight]; + + CGAffineTransform transform = CGAffineTransformMakeRotation(angle); + CGRect frame = [self rectInWindowBounds:self.applicationKeyWindow.bounds statusBarOrientation:statusBarOrientation statusBarHeight:statusBarHeight]; + + [self setIfNotEqualTransform:transform frame:frame]; +} + +- (void)setIfNotEqualTransform:(CGAffineTransform)transform frame:(CGRect)frame +{ + if(!CGAffineTransformEqualToTransform(self.maskView.transform, transform)) + { + self.maskView.transform = transform; + } + if(!CGRectEqualToRect(self.maskView.frame, frame)) + { + self.maskView.frame = frame; + } +} + +- (CGFloat)getStatusBarHeight +{ + UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; + if(UIInterfaceOrientationIsLandscape(orientation)) + { + return [UIApplication sharedApplication].statusBarFrame.size.width; + } + else + { + return [UIApplication sharedApplication].statusBarFrame.size.height; + } +} + +- (CGRect)rectInWindowBounds:(CGRect)windowBounds statusBarOrientation:(UIInterfaceOrientation)statusBarOrientation statusBarHeight:(CGFloat)statusBarHeight +{ + CGRect frame = windowBounds; + frame.origin.x += statusBarOrientation == UIInterfaceOrientationLandscapeLeft ? statusBarHeight : 0; + frame.origin.y += statusBarOrientation == UIInterfaceOrientationPortrait ? statusBarHeight : 0; + frame.size.width -= UIInterfaceOrientationIsLandscape(statusBarOrientation) ? statusBarHeight : 0; + frame.size.height -= UIInterfaceOrientationIsPortrait(statusBarOrientation) ? statusBarHeight : 0; + return frame; +} + +CGFloat UIInterfaceOrientationAngleOfOrientation(UIInterfaceOrientation orientation) +{ + CGFloat angle; + + switch (orientation) + { + case UIInterfaceOrientationPortraitUpsideDown: + angle = M_PI; + break; + case UIInterfaceOrientationLandscapeLeft: + angle = -M_PI_2; + break; + case UIInterfaceOrientationLandscapeRight: + angle = M_PI_2; + break; + default: + angle = 0.0; + break; + } + + return angle; +} + +UIInterfaceOrientationMask UIInterfaceOrientationMaskFromOrientation(UIInterfaceOrientation orientation) +{ + return 1 << orientation; +} + +#pragma mark - Factories + +- (UILabel *)multilineLabelWithAttributedString:(NSAttributedString *)attributedString { + UILabel *label = [[UILabel alloc] init]; + [label setTranslatesAutoresizingMaskIntoConstraints:NO]; + [label setAttributedText:attributedString]; + [label setNumberOfLines:0]; + return label; +} + +- (UIImageView *)centeredImageViewForImage:(UIImage *)image { + UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; + [imageView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [imageView setContentMode:UIViewContentModeScaleAspectFit]; + return imageView; +} + +- (CNPPopupButton *)buttonItem:(CNPPopupButtonItem *)item { + CNPPopupButton *button = [[CNPPopupButton alloc] init]; + [button setTranslatesAutoresizingMaskIntoConstraints:NO]; + [button setAttributedTitle:item.buttonTitle forState:UIControlStateNormal]; + [button setBackgroundColor:item.backgroundColor]; + [button.layer setCornerRadius:item.cornerRadius]; + [button.layer setBorderColor:item.borderColor.CGColor]; + [button.layer setBorderWidth:item.borderWidth]; + button.item = item; + return button; +} + +@end + +#pragma mark - CNPPopupButton Methods + +@implementation CNPPopupButton + +@end + +#pragma mark - CNPPopupButtonItem Methods + +@implementation CNPPopupButtonItem + ++ (CNPPopupButtonItem *)defaultButtonItemWithTitle:(NSAttributedString *)title backgroundColor:(UIColor *)color { + CNPPopupButtonItem *item = [[CNPPopupButtonItem alloc] init]; + item.buttonTitle = title; + item.cornerRadius = 3; + item.backgroundColor = color; + item.buttonHeight = 50; + return item; +} + +@end + +@implementation CNPPopupTheme + ++ (CNPPopupTheme *)defaultTheme { + CNPPopupTheme *defaultTheme = [[CNPPopupTheme alloc] init]; + defaultTheme.backgroundColor = [UIColor whiteColor]; + defaultTheme.cornerRadius = 6.0f; + defaultTheme.popupContentInsets = UIEdgeInsetsMake(16.0f, 16.0f, 16.0f, 16.0f); + defaultTheme.popupStyle = CNPPopupStyleCentered; + defaultTheme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + defaultTheme.dismissesOppositeDirection = NO; + defaultTheme.maskType = CNPPopupMaskTypeDimmed; + defaultTheme.shouldDismissOnBackgroundTouch = YES; + defaultTheme.contentVerticalPadding = 12.0f; + return defaultTheme; +} + +@end diff --git a/DAContextMenuTableViewController/DAContextMenuCell.h b/DAContextMenuTableViewController/DAContextMenuCell.h new file mode 100755 index 0000000..aa48fdf --- /dev/null +++ b/DAContextMenuTableViewController/DAContextMenuCell.h @@ -0,0 +1,45 @@ +// +// DAСontextMenuCell.h +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/24/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import + + +@class DAContextMenuCell; + +@protocol DAContextMenuCellDelegate + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell; +- (void)contextMenuDidHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuDidShowInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillShowInCell:(DAContextMenuCell *)cell; +- (BOOL)shouldShowMenuOptionsViewInCell:(DAContextMenuCell *)cell; +@optional +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell; + +@end + + +@interface DAContextMenuCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet UIView *actualContentView; + +@property (readonly, assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (strong, nonatomic) NSString *deleteButtonTitle; +@property (assign, nonatomic) BOOL editable; +@property (assign, nonatomic) CGFloat menuOptionButtonTitlePadding; +@property (assign, nonatomic) CGFloat menuOptionsAnimationDuration; +@property (assign, nonatomic) CGFloat bounceValue; +@property (strong, nonatomic) NSString *moreOptionsButtonTitle; + +@property (weak, nonatomic) id delegate; + +- (CGFloat)contextMenuWidth; +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler; + +@end diff --git a/DAContextMenuTableViewController/DAContextMenuCell.m b/DAContextMenuTableViewController/DAContextMenuCell.m new file mode 100755 index 0000000..eaa94a0 --- /dev/null +++ b/DAContextMenuTableViewController/DAContextMenuCell.m @@ -0,0 +1,269 @@ +// +// DAСontextMenuCell.m +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/24/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import "DAContextMenuCell.h" + +@interface DAContextMenuCell () + +@property (strong, nonatomic) UIView *contextMenuView; +@property (strong, nonatomic) UIButton *moreOptionsButton; +@property (strong, nonatomic) UIButton *deleteButton; +@property (assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (assign, nonatomic) BOOL shouldDisplayContextMenuView; +@property (assign, nonatomic) CGFloat initialTouchPositionX; + +@end + + +@implementation DAContextMenuCell + +#pragma mark - Initialization + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self setUp]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self setUp]; +} + +- (void)setUp +{ + self.contextMenuView = [[UIView alloc] initWithFrame:self.actualContentView.bounds]; + self.contextMenuView.backgroundColor = self.contentView.backgroundColor; + [self.contentView insertSubview:self.contextMenuView belowSubview:self.actualContentView]; + self.contextMenuHidden = self.contextMenuView.hidden = YES; + self.shouldDisplayContextMenuView = NO; + self.editable = YES; + self.moreOptionsButtonTitle = @"More"; + self.deleteButtonTitle = @"Delete"; + self.menuOptionButtonTitlePadding = 25.; + self.menuOptionsAnimationDuration = 0.3; + self.bounceValue = 30.; + UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; + panRecognizer.delegate = self; + [self addGestureRecognizer:panRecognizer]; + [self setNeedsLayout]; +} + +#pragma mark - Public + +- (CGFloat)contextMenuWidth +{ + return CGRectGetWidth(self.deleteButton.frame) + CGRectGetWidth(self.moreOptionsButton.frame); +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + self.contextMenuView.frame = self.actualContentView.bounds; + [self.contentView sendSubviewToBack:self.contextMenuView]; + [self.contentView bringSubviewToFront:self.actualContentView]; + + CGFloat height = CGRectGetHeight(self.bounds); + CGFloat width = CGRectGetWidth(self.bounds); + CGFloat menuOptionButtonWidth = [self menuOptionButtonWidth]; + self.moreOptionsButton.frame = CGRectMake(width - menuOptionButtonWidth - CGRectGetWidth(self.deleteButton.frame), 0., menuOptionButtonWidth, height); + self.deleteButton.frame = CGRectMake(width - menuOptionButtonWidth, 0., menuOptionButtonWidth, height); +} + +- (CGFloat)menuOptionButtonWidth +{ + NSString *string = ([self.deleteButtonTitle length] > [self.moreOptionsButtonTitle length]) ? self.deleteButtonTitle : self.moreOptionsButtonTitle; + CGFloat width = roundf([string sizeWithFont:self.moreOptionsButton.titleLabel.font].width + 2. * self.menuOptionButtonTitlePadding); + width = MIN(width, CGRectGetWidth(self.bounds) / 2. - 10.); + if ((NSInteger)width % 2) { + width += 1.; + } + return width; +} + +- (void)setDeleteButtonTitle:(NSString *)deleteButtonTitle +{ + _deleteButtonTitle = deleteButtonTitle; + [self.deleteButton setTitle:deleteButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setEditable:(BOOL)editable +{ + if (_editable != editable) { + _editable = editable; + [self setNeedsLayout]; + } +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setHighlighted:highlighted animated:animated]; + } +} + +- (void)setMenuOptionButtonTitlePadding:(CGFloat)menuOptionButtonTitlePadding +{ + if (_menuOptionButtonTitlePadding != menuOptionButtonTitlePadding) { + _menuOptionButtonTitlePadding = menuOptionButtonTitlePadding; + [self setNeedsLayout]; + } +} + +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler +{ + if (self.selected) { + [self setSelected:NO animated:NO]; + } + CGRect frame = CGRectMake((hidden) ? 0 : -[self contextMenuWidth], 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + [UIView animateWithDuration:(animated) ? self.menuOptionsAnimationDuration : 0. + delay:0. + options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut + animations:^ + { + self.actualContentView.frame = frame; + } completion:^(BOOL finished) { + self.contextMenuHidden = hidden; + self.shouldDisplayContextMenuView = !hidden; + if (!hidden) { + [self.delegate contextMenuDidShowInCell:self]; + } else { + [self.delegate contextMenuDidHideInCell:self]; + } + if (completionHandler) { + completionHandler(); + } + }]; +} + +- (void)setMoreOptionsButtonTitle:(NSString *)moreOptionsButtonTitle +{ + _moreOptionsButtonTitle = moreOptionsButtonTitle; + [self.moreOptionsButton setTitle:self.moreOptionsButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setSelected:selected animated:animated]; + } +} + +#pragma mark - Private + +- (void)handlePan:(UIPanGestureRecognizer *)recognizer; +{ + if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + UIPanGestureRecognizer *panRecognizer = (UIPanGestureRecognizer *)recognizer; + + CGPoint currentTouchPoint = [panRecognizer locationInView:self.contentView]; + CGFloat currentTouchPositionX = currentTouchPoint.x; + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.initialTouchPositionX = currentTouchPositionX; + if (velocity.x > 0) { + [self.delegate contextMenuWillHideInCell:self]; + } else { + [self.delegate contextMenuDidShowInCell:self]; + } + } else if (recognizer.state == UIGestureRecognizerStateChanged) { + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (!self.contextMenuHidden || (velocity.x > 0. || [self.delegate shouldShowMenuOptionsViewInCell:self])) { + if (self.selected) { + [self setSelected:NO animated:NO]; + } + self.contextMenuView.hidden = NO; + CGFloat panAmount = currentTouchPositionX - self.initialTouchPositionX; + self.initialTouchPositionX = currentTouchPositionX; + CGFloat minOriginX = -[self contextMenuWidth] - self.bounceValue; + CGFloat maxOriginX = 0.; + CGFloat originX = CGRectGetMinX(self.actualContentView.frame) + panAmount; + originX = MIN(maxOriginX, originX); + originX = MAX(minOriginX, originX); + + + if ((originX < -0.5 * [self contextMenuWidth] && velocity.x < 0.) || velocity.x < -100) { + self.shouldDisplayContextMenuView = YES; + } else if ((originX > -0.3 * [self contextMenuWidth] && velocity.x > 0.) || velocity.x > 100) { + self.shouldDisplayContextMenuView = NO; + } + self.actualContentView.frame = CGRectMake(originX, 0., CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + } + } else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) { + [self setMenuOptionsViewHidden:!self.shouldDisplayContextMenuView animated:YES completionHandler:nil]; + } + } +} + +- (void)deleteButtonTapped +{ + if ([self.delegate respondsToSelector:@selector(contextMenuCellDidSelectDeleteOption:)]) { + [self.delegate contextMenuCellDidSelectDeleteOption:self]; + } +} + +- (void)moreButtonTapped +{ + [self.delegate contextMenuCellDidSelectMoreOption:self]; +} + +- (void)prepareForReuse +{ + [super prepareForReuse]; + [self setMenuOptionsViewHidden:YES animated:NO completionHandler:nil]; +} + +#pragma mark * Lazy getters + +- (UIButton *)moreOptionsButton +{ + if (!_moreOptionsButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _moreOptionsButton = [[UIButton alloc] initWithFrame:frame]; + _moreOptionsButton.backgroundColor = [UIColor lightGrayColor]; + [self.contextMenuView addSubview:_moreOptionsButton]; + [_moreOptionsButton addTarget:self action:@selector(moreButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _moreOptionsButton; +} + +- (UIButton *)deleteButton +{ + if (self.editable) { + if (!_deleteButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _deleteButton = [[UIButton alloc] initWithFrame:frame]; + _deleteButton.backgroundColor = [UIColor colorWithRed:251./255. green:34./255. blue:38./255. alpha:1.]; + [self.contextMenuView addSubview:_deleteButton]; + [_deleteButton addTarget:self action:@selector(deleteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _deleteButton; + } + return nil; +} + +#pragma mark * UIPanGestureRecognizer delegate + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer +{ + if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self]; + return fabs(translation.x) > fabs(translation.y); + } + return YES; +} + +@end \ No newline at end of file diff --git a/DAContextMenuTableViewController/DAContextMenuTableViewController.h b/DAContextMenuTableViewController/DAContextMenuTableViewController.h new file mode 100755 index 0000000..57ef879 --- /dev/null +++ b/DAContextMenuTableViewController/DAContextMenuTableViewController.h @@ -0,0 +1,16 @@ +// +// DAContextMenuTableViewController.h +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/24/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import +#import "DAContextMenuCell.h" + +@interface DAContextMenuTableViewController : UITableViewController + +@property (assign, nonatomic) BOOL shouldDisableUserInteractionWhileEditing; + +@end diff --git a/DAContextMenuTableViewController/DAContextMenuTableViewController.m b/DAContextMenuTableViewController/DAContextMenuTableViewController.m new file mode 100755 index 0000000..d7f8e20 --- /dev/null +++ b/DAContextMenuTableViewController/DAContextMenuTableViewController.m @@ -0,0 +1,142 @@ +// +// DAContextMenuTableViewController.m +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/24/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import "DAContextMenuTableViewController.h" + +#import "DAOverlayView.h" + + +@interface DAContextMenuTableViewController () + +@property (strong, nonatomic) DAContextMenuCell *cellDisplayingMenuOptions; +@property (strong, nonatomic) DAOverlayView *overlayView; +@property (assign, nonatomic) BOOL customEditing; +@property (assign, nonatomic) BOOL customEditingAnimationInProgress; +@property (strong, nonatomic) UIBarButtonItem *editBarButtonItem; +@property (strong, nonatomic) UIBarButtonItem *doneBarButtonItem; + +@end + + +@implementation DAContextMenuTableViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.customEditing = self.customEditingAnimationInProgress = NO; +} + +#pragma mark - Private + +- (void)hideMenuOptionsAnimated:(BOOL)animated +{ + __block DAContextMenuTableViewController *weakSelf = self; + [self.cellDisplayingMenuOptions setMenuOptionsViewHidden:YES animated:animated completionHandler:^{ + weakSelf.customEditing = NO; + }]; +} + +- (void)setCustomEditing:(BOOL)customEditing +{ + if (_customEditing != customEditing) { + _customEditing = customEditing; + self.tableView.scrollEnabled = !customEditing; + if (customEditing) { + if (!_overlayView) { + _overlayView = [[DAOverlayView alloc] initWithFrame:self.view.bounds]; + _overlayView.backgroundColor = [UIColor clearColor]; + _overlayView.delegate = self; + } + self.overlayView.frame = self.view.bounds; + [self.view addSubview:_overlayView]; + if (self.shouldDisableUserInteractionWhileEditing) { + for (UIView *view in self.tableView.subviews) { + if ((view.gestureRecognizers.count == 0) && view != self.cellDisplayingMenuOptions && view != self.overlayView) { + view.userInteractionEnabled = NO; + } + } + } + } else { + self.cellDisplayingMenuOptions = nil; + [self.overlayView removeFromSuperview]; + for (UIView *view in self.tableView.subviews) { + if ((view.gestureRecognizers.count == 0) && view != self.cellDisplayingMenuOptions && view != self.overlayView) { + view.userInteractionEnabled = YES; + } + } + } + } +} + +#pragma mark * DAContextMenuCell delegate + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell +{ + NSAssert(NO, @"Should be implemented in subclasses"); +} + +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell +{ + [cell.superview sendSubviewToBack:cell]; + self.customEditing = NO; +} + +- (void)contextMenuDidHideInCell:(DAContextMenuCell *)cell +{ + self.customEditing = NO; + self.customEditingAnimationInProgress = NO; +} + +- (void)contextMenuDidShowInCell:(DAContextMenuCell *)cell +{ + self.cellDisplayingMenuOptions = cell; + self.customEditing = YES; + self.customEditingAnimationInProgress = NO; +} + +- (void)contextMenuWillHideInCell:(DAContextMenuCell *)cell +{ + self.customEditingAnimationInProgress = YES; +} + +- (void)contextMenuWillShowInCell:(DAContextMenuCell *)cell +{ + self.customEditingAnimationInProgress = YES; +} + +- (BOOL)shouldShowMenuOptionsViewInCell:(DAContextMenuCell *)cell +{ + return self.customEditing && !self.customEditingAnimationInProgress; +} + +#pragma mark * DAOverlayView delegate + +- (UIView *)overlayView:(DAOverlayView *)view didHitTest:(CGPoint)point withEvent:(UIEvent *)event +{ + BOOL shouldIterceptTouches = YES; + CGPoint location = [self.view convertPoint:point fromView:view]; + CGRect rect = [self.view convertRect:self.cellDisplayingMenuOptions.frame toView:self.view]; + shouldIterceptTouches = CGRectContainsPoint(rect, location); + if (!shouldIterceptTouches) { + [self hideMenuOptionsAnimated:YES]; + } + return (shouldIterceptTouches) ? [self.cellDisplayingMenuOptions hitTest:point withEvent:event] : view; +} + +#pragma mark * UITableView delegate + +- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath +{ + if ([tableView cellForRowAtIndexPath:indexPath] == self.cellDisplayingMenuOptions) { + [self hideMenuOptionsAnimated:YES]; + return NO; + } + return YES; +} + +@end \ No newline at end of file diff --git a/DAContextMenuTableViewController/DAOverlayView.h b/DAContextMenuTableViewController/DAOverlayView.h new file mode 100755 index 0000000..ccf4ac8 --- /dev/null +++ b/DAContextMenuTableViewController/DAOverlayView.h @@ -0,0 +1,25 @@ +// +// DAOverlayView.h +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/25/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import + + +@class DAOverlayView; + +@protocol DAOverlayViewDelegate + +- (UIView *)overlayView:(DAOverlayView *)view didHitTest:(CGPoint)point withEvent:(UIEvent *)event; + +@end + + +@interface DAOverlayView : UIView + +@property (weak, nonatomic) id delegate; + +@end diff --git a/DAContextMenuTableViewController/DAOverlayView.m b/DAContextMenuTableViewController/DAOverlayView.m new file mode 100755 index 0000000..53669b3 --- /dev/null +++ b/DAContextMenuTableViewController/DAOverlayView.m @@ -0,0 +1,18 @@ +// +// DAOverlayView.m +// DAContextMenuTableViewControllerDemo +// +// Created by Daria Kopaliani on 7/25/13. +// Copyright (c) 2013 Daria Kopaliani. All rights reserved. +// + +#import "DAOverlayView.h" + +@implementation DAOverlayView + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event +{ + return [self.delegate overlayView:self didHitTest:point withEvent:event]; +} + +@end \ No newline at end of file diff --git a/DetailViewController.h b/DetailViewController.h new file mode 100755 index 0000000..ad7be0b --- /dev/null +++ b/DetailViewController.h @@ -0,0 +1,13 @@ +// +// DetailViewController.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface DetailViewController : UIViewController + +@end diff --git a/DetailViewController.m b/DetailViewController.m new file mode 100755 index 0000000..7e45072 --- /dev/null +++ b/DetailViewController.m @@ -0,0 +1,37 @@ +// +// DetailViewController.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "DetailViewController.h" + +@interface DetailViewController () + +@end + +@implementation DetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DetailViewController.xib b/DetailViewController.xib new file mode 100755 index 0000000..ca42dee --- /dev/null +++ b/DetailViewController.xib @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/project.pbxproj b/DownSheet/DownSheet.xcodeproj/project.pbxproj new file mode 100644 index 0000000..78dfb4f --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/project.pbxproj @@ -0,0 +1,766 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7942FB2E1A2AED1B0037BAA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB2D1A2AED1B0037BAA6 /* Foundation.framework */; }; + 7942FB301A2AED1B0037BAA6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB2F1A2AED1B0037BAA6 /* CoreGraphics.framework */; }; + 7942FB321A2AED1B0037BAA6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB311A2AED1B0037BAA6 /* UIKit.framework */; }; + 7942FB381A2AED1B0037BAA6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB361A2AED1B0037BAA6 /* InfoPlist.strings */; }; + 7942FB3A1A2AED1B0037BAA6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB391A2AED1B0037BAA6 /* main.m */; }; + 7942FB3E1A2AED1B0037BAA6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB3D1A2AED1B0037BAA6 /* AppDelegate.m */; }; + 7942FB401A2AED1B0037BAA6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB3F1A2AED1B0037BAA6 /* Images.xcassets */; }; + 7942FB471A2AED1B0037BAA6 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB461A2AED1B0037BAA6 /* XCTest.framework */; }; + 7942FB481A2AED1B0037BAA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB2D1A2AED1B0037BAA6 /* Foundation.framework */; }; + 7942FB491A2AED1B0037BAA6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7942FB311A2AED1B0037BAA6 /* UIKit.framework */; }; + 7942FB511A2AED1B0037BAA6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB4F1A2AED1B0037BAA6 /* InfoPlist.strings */; }; + 7942FB531A2AED1B0037BAA6 /* DownSheetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB521A2AED1B0037BAA6 /* DownSheetTests.m */; }; + 7942FB611A2AED3E0037BAA6 /* DownSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB5E1A2AED3E0037BAA6 /* DownSheet.m */; }; + 7942FB621A2AED3E0037BAA6 /* DownSheetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB601A2AED3E0037BAA6 /* DownSheetCell.m */; }; + 7942FB651A2AED500037BAA6 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7942FB641A2AED500037BAA6 /* ViewController.m */; }; + 7942FB761A2AEF550037BAA6 /* icon_add_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6A1A2AEF550037BAA6 /* icon_add_hover@2x.png */; }; + 7942FB771A2AEF550037BAA6 /* icon_add@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6B1A2AEF550037BAA6 /* icon_add@2x.png */; }; + 7942FB781A2AEF550037BAA6 /* icon_album_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6C1A2AEF550037BAA6 /* icon_album_hover@2x.png */; }; + 7942FB791A2AEF550037BAA6 /* icon_album@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6D1A2AEF550037BAA6 /* icon_album@2x.png */; }; + 7942FB7A1A2AEF550037BAA6 /* icon_buy_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6E1A2AEF550037BAA6 /* icon_buy_hover@2x.png */; }; + 7942FB7B1A2AEF550037BAA6 /* icon_buy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB6F1A2AEF550037BAA6 /* icon_buy@2x.png */; }; + 7942FB7C1A2AEF550037BAA6 /* icon_computer_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB701A2AEF550037BAA6 /* icon_computer_hover@2x.png */; }; + 7942FB7D1A2AEF550037BAA6 /* icon_computer@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB711A2AEF550037BAA6 /* icon_computer@2x.png */; }; + 7942FB7E1A2AEF550037BAA6 /* icon_del_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB721A2AEF550037BAA6 /* icon_del_hover@2x.png */; }; + 7942FB7F1A2AEF550037BAA6 /* icon_del@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB731A2AEF550037BAA6 /* icon_del@2x.png */; }; + 7942FB801A2AEF550037BAA6 /* icon_down_hover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB741A2AEF550037BAA6 /* icon_down_hover@2x.png */; }; + 7942FB811A2AEF550037BAA6 /* icon_down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7942FB751A2AEF550037BAA6 /* icon_down@2x.png */; }; + 8410B71C1B0A134100A2CEBC /* work_time.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8410B71B1B0A134100A2CEBC /* work_time.plist */; }; + 8410B71F1B0A154000A2CEBC /* school_exp.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8410B71E1B0A154000A2CEBC /* school_exp.plist */; }; + 8410B7261B0A227700A2CEBC /* time_window.m in Sources */ = {isa = PBXBuildFile; fileRef = 8410B7251B0A227700A2CEBC /* time_window.m */; }; + 84930D011B09DE9400478BC2 /* work_days.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84930D001B09DE9400478BC2 /* work_days.plist */; }; + 84930D041B09DECA00478BC2 /* workday.m in Sources */ = {isa = PBXBuildFile; fileRef = 84930D031B09DECA00478BC2 /* workday.m */; }; + 84930D071B09DEE200478BC2 /* work_cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84930D061B09DEE200478BC2 /* work_cell.m */; }; + 84930D0A1B09DFBA00478BC2 /* Work_Day.m in Sources */ = {isa = PBXBuildFile; fileRef = 84930D091B09DFBA00478BC2 /* Work_Day.m */; }; + 84930D0E1B09EC6500478BC2 /* salary_range.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84930D0D1B09EC6500478BC2 /* salary_range.plist */; }; + 84930D111B09EE5300478BC2 /* lowest_study.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84930D101B09EE5300478BC2 /* lowest_study.plist */; }; + 84930D141B09EFBE00478BC2 /* send_cycle.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84930D131B09EFBE00478BC2 /* send_cycle.plist */; }; + 84930D1B1B09F55C00478BC2 /* Receive_email.m in Sources */ = {isa = PBXBuildFile; fileRef = 84930D1A1B09F55C00478BC2 /* Receive_email.m */; }; + 84930D1E1B09F7C500478BC2 /* email.m in Sources */ = {isa = PBXBuildFile; fileRef = 84930D1D1B09F7C500478BC2 /* email.m */; }; + 84EFB4141B0835D8008AC568 /* job_first.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4131B0835D8008AC568 /* job_first.plist */; }; + 84EFB41C1B084420008AC568 /* job_second(0).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB41B1B084420008AC568 /* job_second(0).plist */; }; + 84EFB41E1B0847C7008AC568 /* job_second(1).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB41D1B0847C7008AC568 /* job_second(1).plist */; }; + 84EFB4201B084A07008AC568 /* job_second(2).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB41F1B084A07008AC568 /* job_second(2).plist */; }; + 84EFB4221B084ADC008AC568 /* job_second(3).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4211B084ADC008AC568 /* job_second(3).plist */; }; + 84EFB4241B084B6D008AC568 /* job_second(4).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4231B084B6D008AC568 /* job_second(4).plist */; }; + 84EFB4261B084BEA008AC568 /* job_second(5).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4251B084BEA008AC568 /* job_second(5).plist */; }; + 84EFB4281B084C60008AC568 /* job_second(6).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4271B084C60008AC568 /* job_second(6).plist */; }; + 84EFB42A1B084E1C008AC568 /* job_second(7).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4291B084E1C008AC568 /* job_second(7).plist */; }; + 84EFB42C1B084E8B008AC568 /* job_second(8).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB42B1B084E8B008AC568 /* job_second(8).plist */; }; + 84EFB42E1B084F03008AC568 /* job_second(9).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB42D1B084F03008AC568 /* job_second(9).plist */; }; + 84EFB4301B084F46008AC568 /* job_second(10).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB42F1B084F46008AC568 /* job_second(10).plist */; }; + 84EFB4351B085C8A008AC568 /* job_third(0).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4341B085C8A008AC568 /* job_third(0).plist */; }; + 84EFB4371B085D1C008AC568 /* job_third(1).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4361B085D1C008AC568 /* job_third(1).plist */; }; + 84EFB4391B085D29008AC568 /* job_third(2).plist in Resources */ = {isa = PBXBuildFile; fileRef = 84EFB4381B085D29008AC568 /* job_third(2).plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 7942FB4A1A2AED1B0037BAA6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7942FB221A2AED1B0037BAA6 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7942FB291A2AED1B0037BAA6; + remoteInfo = DownSheet; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 7942FB2A1A2AED1B0037BAA6 /* DownSheet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DownSheet.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7942FB2D1A2AED1B0037BAA6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 7942FB2F1A2AED1B0037BAA6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 7942FB311A2AED1B0037BAA6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 7942FB351A2AED1B0037BAA6 /* DownSheet-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DownSheet-Info.plist"; sourceTree = ""; }; + 7942FB371A2AED1B0037BAA6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 7942FB391A2AED1B0037BAA6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 7942FB3B1A2AED1B0037BAA6 /* DownSheet-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DownSheet-Prefix.pch"; sourceTree = ""; }; + 7942FB3C1A2AED1B0037BAA6 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7942FB3D1A2AED1B0037BAA6 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 7942FB3F1A2AED1B0037BAA6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 7942FB451A2AED1B0037BAA6 /* DownSheetTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DownSheetTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 7942FB461A2AED1B0037BAA6 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 7942FB4E1A2AED1B0037BAA6 /* DownSheetTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DownSheetTests-Info.plist"; sourceTree = ""; }; + 7942FB501A2AED1B0037BAA6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 7942FB521A2AED1B0037BAA6 /* DownSheetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DownSheetTests.m; sourceTree = ""; }; + 7942FB5D1A2AED3E0037BAA6 /* DownSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownSheet.h; path = DownSheet/Classes/DownSheet.h; sourceTree = ""; }; + 7942FB5E1A2AED3E0037BAA6 /* DownSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DownSheet.m; path = DownSheet/Classes/DownSheet.m; sourceTree = ""; }; + 7942FB5F1A2AED3E0037BAA6 /* DownSheetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownSheetCell.h; path = DownSheet/Classes/DownSheetCell.h; sourceTree = ""; }; + 7942FB601A2AED3E0037BAA6 /* DownSheetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DownSheetCell.m; path = DownSheet/Classes/DownSheetCell.m; sourceTree = ""; }; + 7942FB631A2AED500037BAA6 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewController.h; path = DownSheet/ViewController.h; sourceTree = ""; }; + 7942FB641A2AED500037BAA6 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ViewController.m; path = DownSheet/ViewController.m; sourceTree = ""; }; + 7942FB6A1A2AEF550037BAA6 /* icon_add_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_add_hover@2x.png"; sourceTree = ""; }; + 7942FB6B1A2AEF550037BAA6 /* icon_add@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_add@2x.png"; sourceTree = ""; }; + 7942FB6C1A2AEF550037BAA6 /* icon_album_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_album_hover@2x.png"; sourceTree = ""; }; + 7942FB6D1A2AEF550037BAA6 /* icon_album@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_album@2x.png"; sourceTree = ""; }; + 7942FB6E1A2AEF550037BAA6 /* icon_buy_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_buy_hover@2x.png"; sourceTree = ""; }; + 7942FB6F1A2AEF550037BAA6 /* icon_buy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_buy@2x.png"; sourceTree = ""; }; + 7942FB701A2AEF550037BAA6 /* icon_computer_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_computer_hover@2x.png"; sourceTree = ""; }; + 7942FB711A2AEF550037BAA6 /* icon_computer@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_computer@2x.png"; sourceTree = ""; }; + 7942FB721A2AEF550037BAA6 /* icon_del_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_del_hover@2x.png"; sourceTree = ""; }; + 7942FB731A2AEF550037BAA6 /* icon_del@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_del@2x.png"; sourceTree = ""; }; + 7942FB741A2AEF550037BAA6 /* icon_down_hover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_down_hover@2x.png"; sourceTree = ""; }; + 7942FB751A2AEF550037BAA6 /* icon_down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_down@2x.png"; sourceTree = ""; }; + 8410B71B1B0A134100A2CEBC /* work_time.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = work_time.plist; sourceTree = ""; }; + 8410B71E1B0A154000A2CEBC /* school_exp.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = school_exp.plist; sourceTree = ""; }; + 8410B7241B0A227700A2CEBC /* time_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time_window.h; sourceTree = ""; }; + 8410B7251B0A227700A2CEBC /* time_window.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = time_window.m; sourceTree = ""; }; + 84930D001B09DE9400478BC2 /* work_days.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = work_days.plist; sourceTree = ""; }; + 84930D021B09DECA00478BC2 /* workday.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workday.h; sourceTree = ""; }; + 84930D031B09DECA00478BC2 /* workday.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = workday.m; sourceTree = ""; }; + 84930D051B09DEE200478BC2 /* work_cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = work_cell.h; sourceTree = ""; }; + 84930D061B09DEE200478BC2 /* work_cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = work_cell.m; sourceTree = ""; }; + 84930D081B09DFBA00478BC2 /* Work_Day.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Work_Day.h; sourceTree = ""; }; + 84930D091B09DFBA00478BC2 /* Work_Day.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Work_Day.m; sourceTree = ""; }; + 84930D0D1B09EC6500478BC2 /* salary_range.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = salary_range.plist; sourceTree = ""; }; + 84930D101B09EE5300478BC2 /* lowest_study.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = lowest_study.plist; sourceTree = ""; }; + 84930D131B09EFBE00478BC2 /* send_cycle.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = send_cycle.plist; sourceTree = ""; }; + 84930D191B09F55C00478BC2 /* Receive_email.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Receive_email.h; sourceTree = ""; }; + 84930D1A1B09F55C00478BC2 /* Receive_email.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Receive_email.m; sourceTree = ""; }; + 84930D1C1B09F7C500478BC2 /* email.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = email.h; sourceTree = ""; }; + 84930D1D1B09F7C500478BC2 /* email.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = email.m; sourceTree = ""; }; + 84EFB4131B0835D8008AC568 /* job_first.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = job_first.plist; sourceTree = ""; }; + 84EFB41B1B084420008AC568 /* job_second(0).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(0).plist"; sourceTree = ""; }; + 84EFB41D1B0847C7008AC568 /* job_second(1).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(1).plist"; sourceTree = ""; }; + 84EFB41F1B084A07008AC568 /* job_second(2).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(2).plist"; sourceTree = ""; }; + 84EFB4211B084ADC008AC568 /* job_second(3).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(3).plist"; sourceTree = ""; }; + 84EFB4231B084B6D008AC568 /* job_second(4).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(4).plist"; sourceTree = ""; }; + 84EFB4251B084BEA008AC568 /* job_second(5).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(5).plist"; sourceTree = ""; }; + 84EFB4271B084C60008AC568 /* job_second(6).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(6).plist"; sourceTree = ""; }; + 84EFB4291B084E1C008AC568 /* job_second(7).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(7).plist"; sourceTree = ""; }; + 84EFB42B1B084E8B008AC568 /* job_second(8).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(8).plist"; sourceTree = ""; }; + 84EFB42D1B084F03008AC568 /* job_second(9).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(9).plist"; sourceTree = ""; }; + 84EFB42F1B084F46008AC568 /* job_second(10).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_second(10).plist"; sourceTree = ""; }; + 84EFB4341B085C8A008AC568 /* job_third(0).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_third(0).plist"; sourceTree = ""; }; + 84EFB4361B085D1C008AC568 /* job_third(1).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_third(1).plist"; sourceTree = ""; }; + 84EFB4381B085D29008AC568 /* job_third(2).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "job_third(2).plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7942FB271A2AED1B0037BAA6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7942FB301A2AED1B0037BAA6 /* CoreGraphics.framework in Frameworks */, + 7942FB321A2AED1B0037BAA6 /* UIKit.framework in Frameworks */, + 7942FB2E1A2AED1B0037BAA6 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7942FB421A2AED1B0037BAA6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7942FB471A2AED1B0037BAA6 /* XCTest.framework in Frameworks */, + 7942FB491A2AED1B0037BAA6 /* UIKit.framework in Frameworks */, + 7942FB481A2AED1B0037BAA6 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7942FB211A2AED1B0037BAA6 = { + isa = PBXGroup; + children = ( + 7942FB331A2AED1B0037BAA6 /* DownSheet */, + 7942FB4C1A2AED1B0037BAA6 /* DownSheetTests */, + 7942FB2C1A2AED1B0037BAA6 /* Frameworks */, + 7942FB2B1A2AED1B0037BAA6 /* Products */, + ); + sourceTree = ""; + }; + 7942FB2B1A2AED1B0037BAA6 /* Products */ = { + isa = PBXGroup; + children = ( + 7942FB2A1A2AED1B0037BAA6 /* DownSheet.app */, + 7942FB451A2AED1B0037BAA6 /* DownSheetTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 7942FB2C1A2AED1B0037BAA6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7942FB2D1A2AED1B0037BAA6 /* Foundation.framework */, + 7942FB2F1A2AED1B0037BAA6 /* CoreGraphics.framework */, + 7942FB311A2AED1B0037BAA6 /* UIKit.framework */, + 7942FB461A2AED1B0037BAA6 /* XCTest.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 7942FB331A2AED1B0037BAA6 /* DownSheet */ = { + isa = PBXGroup; + children = ( + 84930D0B1B09E8DE00478BC2 /* controller */, + 8410B7201B0A222D00A2CEBC /* time_window */, + 8410B71D1B0A151A00A2CEBC /* school_exp */, + 8410B71A1B0A131300A2CEBC /* work_time */, + 84930D181B09F53400478BC2 /* receive_email */, + 84930D121B09EF8E00478BC2 /* send_cycle */, + 84930D0F1B09EE1C00478BC2 /* Lowest_study */, + 84930D0C1B09EC2B00478BC2 /* salary */, + 84930CFF1B09DE4700478BC2 /* work_days */, + 84930CFE1B09DDDB00478BC2 /* job_kind */, + 7942FB691A2AEF460037BAA6 /* Resouce */, + 7942FB3C1A2AED1B0037BAA6 /* AppDelegate.h */, + 7942FB3D1A2AED1B0037BAA6 /* AppDelegate.m */, + 7942FB3F1A2AED1B0037BAA6 /* Images.xcassets */, + 7942FB341A2AED1B0037BAA6 /* Supporting Files */, + ); + path = DownSheet; + sourceTree = ""; + }; + 7942FB341A2AED1B0037BAA6 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 7942FB351A2AED1B0037BAA6 /* DownSheet-Info.plist */, + 7942FB361A2AED1B0037BAA6 /* InfoPlist.strings */, + 7942FB391A2AED1B0037BAA6 /* main.m */, + 7942FB3B1A2AED1B0037BAA6 /* DownSheet-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 7942FB4C1A2AED1B0037BAA6 /* DownSheetTests */ = { + isa = PBXGroup; + children = ( + 7942FB521A2AED1B0037BAA6 /* DownSheetTests.m */, + 7942FB4D1A2AED1B0037BAA6 /* Supporting Files */, + ); + path = DownSheetTests; + sourceTree = ""; + }; + 7942FB4D1A2AED1B0037BAA6 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 7942FB4E1A2AED1B0037BAA6 /* DownSheetTests-Info.plist */, + 7942FB4F1A2AED1B0037BAA6 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 7942FB691A2AEF460037BAA6 /* Resouce */ = { + isa = PBXGroup; + children = ( + 7942FB6A1A2AEF550037BAA6 /* icon_add_hover@2x.png */, + 7942FB6B1A2AEF550037BAA6 /* icon_add@2x.png */, + 7942FB6C1A2AEF550037BAA6 /* icon_album_hover@2x.png */, + 7942FB6D1A2AEF550037BAA6 /* icon_album@2x.png */, + 7942FB6E1A2AEF550037BAA6 /* icon_buy_hover@2x.png */, + 7942FB6F1A2AEF550037BAA6 /* icon_buy@2x.png */, + 7942FB701A2AEF550037BAA6 /* icon_computer_hover@2x.png */, + 7942FB711A2AEF550037BAA6 /* icon_computer@2x.png */, + 7942FB721A2AEF550037BAA6 /* icon_del_hover@2x.png */, + 7942FB731A2AEF550037BAA6 /* icon_del@2x.png */, + 7942FB741A2AEF550037BAA6 /* icon_down_hover@2x.png */, + 7942FB751A2AEF550037BAA6 /* icon_down@2x.png */, + ); + path = Resouce; + sourceTree = ""; + }; + 8410B71A1B0A131300A2CEBC /* work_time */ = { + isa = PBXGroup; + children = ( + 8410B71B1B0A134100A2CEBC /* work_time.plist */, + ); + name = work_time; + sourceTree = ""; + }; + 8410B71D1B0A151A00A2CEBC /* school_exp */ = { + isa = PBXGroup; + children = ( + 8410B71E1B0A154000A2CEBC /* school_exp.plist */, + ); + name = school_exp; + sourceTree = ""; + }; + 8410B7201B0A222D00A2CEBC /* time_window */ = { + isa = PBXGroup; + children = ( + 8410B7241B0A227700A2CEBC /* time_window.h */, + 8410B7251B0A227700A2CEBC /* time_window.m */, + ); + name = time_window; + sourceTree = ""; + }; + 84930CFE1B09DDDB00478BC2 /* job_kind */ = { + isa = PBXGroup; + children = ( + 84EFB41A1B0843D1008AC568 /* plist */, + 7942FB631A2AED500037BAA6 /* ViewController.h */, + 7942FB641A2AED500037BAA6 /* ViewController.m */, + 7942FB5D1A2AED3E0037BAA6 /* DownSheet.h */, + 7942FB5E1A2AED3E0037BAA6 /* DownSheet.m */, + 7942FB5F1A2AED3E0037BAA6 /* DownSheetCell.h */, + 7942FB601A2AED3E0037BAA6 /* DownSheetCell.m */, + ); + name = job_kind; + path = ..; + sourceTree = ""; + }; + 84930CFF1B09DE4700478BC2 /* work_days */ = { + isa = PBXGroup; + children = ( + 84930D001B09DE9400478BC2 /* work_days.plist */, + 84930D051B09DEE200478BC2 /* work_cell.h */, + 84930D061B09DEE200478BC2 /* work_cell.m */, + 84930D081B09DFBA00478BC2 /* Work_Day.h */, + 84930D091B09DFBA00478BC2 /* Work_Day.m */, + ); + name = work_days; + sourceTree = ""; + }; + 84930D0B1B09E8DE00478BC2 /* controller */ = { + isa = PBXGroup; + children = ( + 84930D021B09DECA00478BC2 /* workday.h */, + 84930D031B09DECA00478BC2 /* workday.m */, + ); + name = controller; + sourceTree = ""; + }; + 84930D0C1B09EC2B00478BC2 /* salary */ = { + isa = PBXGroup; + children = ( + 84930D0D1B09EC6500478BC2 /* salary_range.plist */, + ); + name = salary; + sourceTree = ""; + }; + 84930D0F1B09EE1C00478BC2 /* Lowest_study */ = { + isa = PBXGroup; + children = ( + 84930D101B09EE5300478BC2 /* lowest_study.plist */, + ); + name = Lowest_study; + sourceTree = ""; + }; + 84930D121B09EF8E00478BC2 /* send_cycle */ = { + isa = PBXGroup; + children = ( + 84930D131B09EFBE00478BC2 /* send_cycle.plist */, + ); + name = send_cycle; + sourceTree = ""; + }; + 84930D181B09F53400478BC2 /* receive_email */ = { + isa = PBXGroup; + children = ( + 84930D191B09F55C00478BC2 /* Receive_email.h */, + 84930D1A1B09F55C00478BC2 /* Receive_email.m */, + 84930D1C1B09F7C500478BC2 /* email.h */, + 84930D1D1B09F7C500478BC2 /* email.m */, + ); + name = receive_email; + sourceTree = ""; + }; + 84EFB41A1B0843D1008AC568 /* plist */ = { + isa = PBXGroup; + children = ( + 84EFB4331B084FBC008AC568 /* Third */, + 84EFB4321B084FB4008AC568 /* Second */, + 84EFB4311B084F9D008AC568 /* First */, + ); + name = plist; + path = DownSheet/Classes; + sourceTree = ""; + }; + 84EFB4311B084F9D008AC568 /* First */ = { + isa = PBXGroup; + children = ( + 84EFB4131B0835D8008AC568 /* job_first.plist */, + ); + name = First; + sourceTree = ""; + }; + 84EFB4321B084FB4008AC568 /* Second */ = { + isa = PBXGroup; + children = ( + 84EFB41B1B084420008AC568 /* job_second(0).plist */, + 84EFB41D1B0847C7008AC568 /* job_second(1).plist */, + 84EFB41F1B084A07008AC568 /* job_second(2).plist */, + 84EFB4211B084ADC008AC568 /* job_second(3).plist */, + 84EFB4231B084B6D008AC568 /* job_second(4).plist */, + 84EFB4251B084BEA008AC568 /* job_second(5).plist */, + 84EFB4271B084C60008AC568 /* job_second(6).plist */, + 84EFB4291B084E1C008AC568 /* job_second(7).plist */, + 84EFB42B1B084E8B008AC568 /* job_second(8).plist */, + 84EFB42D1B084F03008AC568 /* job_second(9).plist */, + 84EFB42F1B084F46008AC568 /* job_second(10).plist */, + ); + name = Second; + sourceTree = ""; + }; + 84EFB4331B084FBC008AC568 /* Third */ = { + isa = PBXGroup; + children = ( + 84EFB4341B085C8A008AC568 /* job_third(0).plist */, + 84EFB4361B085D1C008AC568 /* job_third(1).plist */, + 84EFB4381B085D29008AC568 /* job_third(2).plist */, + ); + name = Third; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7942FB291A2AED1B0037BAA6 /* DownSheet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7942FB561A2AED1B0037BAA6 /* Build configuration list for PBXNativeTarget "DownSheet" */; + buildPhases = ( + 7942FB261A2AED1B0037BAA6 /* Sources */, + 7942FB271A2AED1B0037BAA6 /* Frameworks */, + 7942FB281A2AED1B0037BAA6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DownSheet; + productName = DownSheet; + productReference = 7942FB2A1A2AED1B0037BAA6 /* DownSheet.app */; + productType = "com.apple.product-type.application"; + }; + 7942FB441A2AED1B0037BAA6 /* DownSheetTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7942FB591A2AED1B0037BAA6 /* Build configuration list for PBXNativeTarget "DownSheetTests" */; + buildPhases = ( + 7942FB411A2AED1B0037BAA6 /* Sources */, + 7942FB421A2AED1B0037BAA6 /* Frameworks */, + 7942FB431A2AED1B0037BAA6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 7942FB4B1A2AED1B0037BAA6 /* PBXTargetDependency */, + ); + name = DownSheetTests; + productName = DownSheetTests; + productReference = 7942FB451A2AED1B0037BAA6 /* DownSheetTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7942FB221A2AED1B0037BAA6 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = wolf; + TargetAttributes = { + 7942FB441A2AED1B0037BAA6 = { + TestTargetID = 7942FB291A2AED1B0037BAA6; + }; + }; + }; + buildConfigurationList = 7942FB251A2AED1B0037BAA6 /* Build configuration list for PBXProject "DownSheet" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7942FB211A2AED1B0037BAA6; + productRefGroup = 7942FB2B1A2AED1B0037BAA6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7942FB291A2AED1B0037BAA6 /* DownSheet */, + 7942FB441A2AED1B0037BAA6 /* DownSheetTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7942FB281A2AED1B0037BAA6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 84EFB42E1B084F03008AC568 /* job_second(9).plist in Resources */, + 84EFB4391B085D29008AC568 /* job_third(2).plist in Resources */, + 84EFB4281B084C60008AC568 /* job_second(6).plist in Resources */, + 84EFB4221B084ADC008AC568 /* job_second(3).plist in Resources */, + 84EFB4371B085D1C008AC568 /* job_third(1).plist in Resources */, + 84EFB4201B084A07008AC568 /* job_second(2).plist in Resources */, + 7942FB761A2AEF550037BAA6 /* icon_add_hover@2x.png in Resources */, + 7942FB7F1A2AEF550037BAA6 /* icon_del@2x.png in Resources */, + 84EFB4301B084F46008AC568 /* job_second(10).plist in Resources */, + 7942FB771A2AEF550037BAA6 /* icon_add@2x.png in Resources */, + 8410B71C1B0A134100A2CEBC /* work_time.plist in Resources */, + 7942FB381A2AED1B0037BAA6 /* InfoPlist.strings in Resources */, + 84EFB42A1B084E1C008AC568 /* job_second(7).plist in Resources */, + 84EFB4351B085C8A008AC568 /* job_third(0).plist in Resources */, + 7942FB7C1A2AEF550037BAA6 /* icon_computer_hover@2x.png in Resources */, + 84930D111B09EE5300478BC2 /* lowest_study.plist in Resources */, + 84EFB4261B084BEA008AC568 /* job_second(5).plist in Resources */, + 84EFB41C1B084420008AC568 /* job_second(0).plist in Resources */, + 84930D011B09DE9400478BC2 /* work_days.plist in Resources */, + 8410B71F1B0A154000A2CEBC /* school_exp.plist in Resources */, + 84930D141B09EFBE00478BC2 /* send_cycle.plist in Resources */, + 84EFB4241B084B6D008AC568 /* job_second(4).plist in Resources */, + 7942FB7A1A2AEF550037BAA6 /* icon_buy_hover@2x.png in Resources */, + 84930D0E1B09EC6500478BC2 /* salary_range.plist in Resources */, + 7942FB7B1A2AEF550037BAA6 /* icon_buy@2x.png in Resources */, + 7942FB7D1A2AEF550037BAA6 /* icon_computer@2x.png in Resources */, + 7942FB791A2AEF550037BAA6 /* icon_album@2x.png in Resources */, + 7942FB7E1A2AEF550037BAA6 /* icon_del_hover@2x.png in Resources */, + 7942FB801A2AEF550037BAA6 /* icon_down_hover@2x.png in Resources */, + 84EFB41E1B0847C7008AC568 /* job_second(1).plist in Resources */, + 7942FB781A2AEF550037BAA6 /* icon_album_hover@2x.png in Resources */, + 84EFB42C1B084E8B008AC568 /* job_second(8).plist in Resources */, + 7942FB401A2AED1B0037BAA6 /* Images.xcassets in Resources */, + 84EFB4141B0835D8008AC568 /* job_first.plist in Resources */, + 7942FB811A2AEF550037BAA6 /* icon_down@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7942FB431A2AED1B0037BAA6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7942FB511A2AED1B0037BAA6 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7942FB261A2AED1B0037BAA6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7942FB3E1A2AED1B0037BAA6 /* AppDelegate.m in Sources */, + 84930D071B09DEE200478BC2 /* work_cell.m in Sources */, + 84930D041B09DECA00478BC2 /* workday.m in Sources */, + 7942FB611A2AED3E0037BAA6 /* DownSheet.m in Sources */, + 84930D1B1B09F55C00478BC2 /* Receive_email.m in Sources */, + 7942FB3A1A2AED1B0037BAA6 /* main.m in Sources */, + 84930D0A1B09DFBA00478BC2 /* Work_Day.m in Sources */, + 7942FB621A2AED3E0037BAA6 /* DownSheetCell.m in Sources */, + 84930D1E1B09F7C500478BC2 /* email.m in Sources */, + 7942FB651A2AED500037BAA6 /* ViewController.m in Sources */, + 8410B7261B0A227700A2CEBC /* time_window.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7942FB411A2AED1B0037BAA6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7942FB531A2AED1B0037BAA6 /* DownSheetTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 7942FB4B1A2AED1B0037BAA6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7942FB291A2AED1B0037BAA6 /* DownSheet */; + targetProxy = 7942FB4A1A2AED1B0037BAA6 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 7942FB361A2AED1B0037BAA6 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 7942FB371A2AED1B0037BAA6 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 7942FB4F1A2AED1B0037BAA6 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 7942FB501A2AED1B0037BAA6 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 7942FB541A2AED1B0037BAA6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 7942FB551A2AED1B0037BAA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7942FB571A2AED1B0037BAA6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DownSheet/DownSheet-Prefix.pch"; + INFOPLIST_FILE = "DownSheet/DownSheet-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 7942FB581A2AED1B0037BAA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DownSheet/DownSheet-Prefix.pch"; + INFOPLIST_FILE = "DownSheet/DownSheet-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 7942FB5A1A2AED1B0037BAA6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/DownSheet.app/DownSheet"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DownSheet/DownSheet-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "DownSheetTests/DownSheetTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 7942FB5B1A2AED1B0037BAA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/DownSheet.app/DownSheet"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DownSheet/DownSheet-Prefix.pch"; + INFOPLIST_FILE = "DownSheetTests/DownSheetTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7942FB251A2AED1B0037BAA6 /* Build configuration list for PBXProject "DownSheet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7942FB541A2AED1B0037BAA6 /* Debug */, + 7942FB551A2AED1B0037BAA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7942FB561A2AED1B0037BAA6 /* Build configuration list for PBXNativeTarget "DownSheet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7942FB571A2AED1B0037BAA6 /* Debug */, + 7942FB581A2AED1B0037BAA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7942FB591A2AED1B0037BAA6 /* Build configuration list for PBXNativeTarget "DownSheetTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7942FB5A1A2AED1B0037BAA6 /* Debug */, + 7942FB5B1A2AED1B0037BAA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7942FB221A2AED1B0037BAA6 /* Project object */; +} diff --git a/DownSheet/DownSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/DownSheet/DownSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..989b4d8 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/DownSheet.xcscheme b/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/DownSheet.xcscheme new file mode 100644 index 0000000..b2225f7 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/DownSheet.xcscheme @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/xcschememanagement.plist b/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..df86897 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/donelaccount.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + DownSheet.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7942FB291A2AED1B0037BAA6 + + primary + + + 7942FB441A2AED1B0037BAA6 + + primary + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..636fc13 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/DownSheet.xcscheme b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/DownSheet.xcscheme new file mode 100644 index 0000000..7ef1e3b --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/DownSheet.xcscheme @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/xcschememanagement.plist b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..df86897 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + DownSheet.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7942FB291A2AED1B0037BAA6 + + primary + + + 7942FB441A2AED1B0037BAA6 + + primary + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/DownSheet.xcscheme b/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/DownSheet.xcscheme new file mode 100644 index 0000000..cf21a75 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/DownSheet.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/xcschememanagement.plist b/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..df86897 --- /dev/null +++ b/DownSheet/DownSheet.xcodeproj/xcuserdata/wolf.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + DownSheet.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7942FB291A2AED1B0037BAA6 + + primary + + + 7942FB441A2AED1B0037BAA6 + + primary + + + + + diff --git a/DownSheet/DownSheet/AppDelegate.h b/DownSheet/DownSheet/AppDelegate.h new file mode 100644 index 0000000..8b7926b --- /dev/null +++ b/DownSheet/DownSheet/AppDelegate.h @@ -0,0 +1,19 @@ +// +// AppDelegate.h +// DownSheet +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/AppDelegate.m b/DownSheet/DownSheet/AppDelegate.m new file mode 100644 index 0000000..e4305c2 --- /dev/null +++ b/DownSheet/DownSheet/AppDelegate.m @@ -0,0 +1,56 @@ +// +// AppDelegate.m +// DownSheet +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import "AppDelegate.h" +#import "ViewController.h" +#import "workday.h" +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + // Override point for customization after application launch. + workday *controller = [[workday alloc]init]; + self.window.rootViewController = controller; + self.window.backgroundColor = [UIColor whiteColor]; + [self.window makeKeyAndVisible]; + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Classes/DownSheet.h b/DownSheet/DownSheet/Classes/DownSheet.h new file mode 100755 index 0000000..c5846b9 --- /dev/null +++ b/DownSheet/DownSheet/Classes/DownSheet.h @@ -0,0 +1,55 @@ +// +// DownSheet.h +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import +#import "DownSheetCell.h" +@protocol DownSheetDelegate +@optional + + +-(void)didSelectIndex:(NSInteger)index text:(NSString*)text; + +@end + +@interface DownSheet : UIView{ + /** + *  三级列表 + */ + NSArray *job_first; + NSArray *job_second; + NSArray *job_third; + + int flag; + @public NSString *job; + + UILabel *title; + UITableView *view; + UITableView *view_second; + UITableView *view_third; + + NSArray *listData; + NSArray *listData1; + NSInteger num; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height; +- (void)showInView:(UIViewController *)Sview; +@property(nonatomic,assign) id delegate; + +@property (strong, nonatomic) NSMutableArray *title_table; +@property (strong, nonatomic) NSMutableArray *title_table_1; +@property (strong, nonatomic) NSMutableArray *title_table_2; + +@property (strong, nonatomic) NSString *msg; + + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Classes/DownSheet.m b/DownSheet/DownSheet/Classes/DownSheet.m new file mode 100755 index 0000000..7e42eae --- /dev/null +++ b/DownSheet/DownSheet/Classes/DownSheet.m @@ -0,0 +1,385 @@ +// +// DownSheet.m +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import "DownSheet.h" + + +@implementation DownSheet + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height{ + + _title_table = [[NSMutableArray alloc] init]; + + + /** + * 绑定本地数据(第一级列表) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"job_first.plist" ofType:nil]; + job_first = [NSArray arrayWithContentsOfFile:fullpath]; + + NSLog(@"%@", job_first); + NSLog(@"一级列表本地数据已加载!"); + /** + * 绑定本地数据(第二级列表) + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_second(0).plist" ofType:nil]; + job_second = [NSArray arrayWithContentsOfFile:fullpath_0]; + + NSLog(@"%@", job_second); + NSLog(@"二级列表本地数据已加载!"); + + /** + * 绑定本地数据(第三级列表) + */ + NSString *fullpath_0_0=[[NSBundle mainBundle]pathForResource:@"job_third(0).plist" ofType:nil]; + job_third = [NSArray arrayWithContentsOfFile:fullpath_0_0]; + NSLog(@"%@", job_third); + NSLog(@"三级列表本地数据已加载"); + + num = 1; + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:@" 职业类别"]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + view = [[UITableView alloc]initWithFrame:CGRectMake(0, ScreenHeight, (2*ScreenWidth)/5, ScreenHeight/2) style:UITableViewStylePlain]; + view.scrollEnabled = YES; + view.dataSource = self; + view.delegate = self; + + view_second = [[UITableView alloc]initWithFrame:CGRectMake((2*ScreenWidth)/5, ScreenHeight, ScreenWidth/5, ScreenHeight/2) style:UITableViewStylePlain]; + view_second.scrollEnabled = YES; + view_second.dataSource = self; + view_second.delegate = self; + + view_third = [[UITableView alloc]initWithFrame:CGRectMake((3*ScreenWidth)/5, ScreenHeight, (2*ScreenWidth)/5, ScreenHeight/2) style:UITableViewStylePlain]; + view_third.scrollEnabled = YES; + view_third.dataSource = self; + view_third.delegate = self; + + [self addSubview:title]; + [self addSubview:view]; + [self addSubview:view_second]; + [self addSubview:view_third]; + [self animeData]; + + } + return self; +} + +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(view.frame.size.height), title.frame.size.width, title.frame.size.height)]; + [view setFrame:CGRectMake(view.frame.origin.x, ScreenHeight-view.frame.size.height, view.frame.size.width, view.frame.size.height)]; + [view_second setFrame:CGRectMake(view_second.frame.origin.x, ScreenHeight-view_second.frame.size.height, view_second.frame.size.width, view_second.frame.size.height)]; + [view_third setFrame:CGRectMake(view_third.frame.origin.x,ScreenHeight-view_third.frame.size.height,view_third.frame.size.width, view_third.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [view setFrame:CGRectMake(0, ScreenHeight, (2*ScreenWidth)/5, 0)]; + [view_second setFrame:CGRectMake((2*ScreenWidth)/5, ScreenHeight, ScreenWidth/5, 0)]; + [view_third setFrame:CGRectMake((3*ScreenWidth)/5, ScreenHeight, (2*ScreenWidth)/5, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Return the number of rows in the section. + if (tableView == view) { + // _title_table = [[NSMutableArray alloc] init]; + return job_first.count; + + } + else if(tableView == view_second){ + + _title_table_1 = [[NSMutableArray alloc] init]; + return job_second.count; + } + else{ + _title_table_2 = [[NSMutableArray alloc] init]; + return job_third.count; + } + +} +/** + * 设置每一行数据 + * + * @param tableView <#tableView description#> + * @param indexPath <#indexPath description#> + * + * @return <#return value description#> + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + if (tableView == view) { + + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_first objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + [cell setcell:0.]; + if(cell==nil){ + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + [cell setcell:0.]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"first_kind"]; + [_title_table addObject:cell.InfoLabel.text]; + // Configure the cell... + return cell; + }else if(tableView == view_second){ + + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_second objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + [cell setcell:0.]; + if(cell==nil){ + [cell setcell:0.]; + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + cell.InfoLabel.text = [rowDict objectForKey:@"second_kind"]; + [_title_table_1 addObject:cell.InfoLabel.text]; + + // Configure the cell... + return cell; + + }else{ + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_third objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + [cell setcell:0.]; + if(cell==nil){ + [cell setcell:0.]; + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"third_kind"]; + [_title_table_2 addObject:cell.InfoLabel.text]; + + + // Configure the cell... + return cell; + + } + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 40.; +} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + + + DownSheetCell * cell = (DownSheetCell *)[tableView cellForRowAtIndexPath:indexPath]; + NSLog(@"%@",cell.InfoLabel.text); + + + + + if (tableView == view) { + /** + * 二级菜单 + * + * @param 0 í + * + * @return <#return value description#> + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_second(0).plist" ofType:nil]; + NSString *fullpath_1=[[NSBundle mainBundle]pathForResource:@"job_second(1).plist" ofType:nil]; + NSString *fullpath_2=[[NSBundle mainBundle]pathForResource:@"job_second(2).plist" ofType:nil]; + NSString *fullpath_3=[[NSBundle mainBundle]pathForResource:@"job_second(3).plist" ofType:nil]; + NSString *fullpath_4=[[NSBundle mainBundle]pathForResource:@"job_second(4).plist" ofType:nil]; + NSString *fullpath_5=[[NSBundle mainBundle]pathForResource:@"job_second(5).plist" ofType:nil]; + NSString *fullpath_6=[[NSBundle mainBundle]pathForResource:@"job_second(6).plist" ofType:nil]; + NSString *fullpath_7=[[NSBundle mainBundle]pathForResource:@"job_second(7).plist" ofType:nil]; + NSString *fullpath_8=[[NSBundle mainBundle]pathForResource:@"job_second(8).plist" ofType:nil]; + NSString *fullpath_9=[[NSBundle mainBundle]pathForResource:@"job_second(9).plist" ofType:nil]; + NSString *fullpath_10=[[NSBundle mainBundle]pathForResource:@"job_second(10).plist" ofType:nil]; + _msg = [_title_table objectAtIndex:(indexPath.row)]; + num = indexPath.row; + switch (num) { + case 1: + job_second = [NSArray arrayWithContentsOfFile:fullpath_1]; + flag = 1; + break; + case 2: + job_second = [NSArray arrayWithContentsOfFile:fullpath_2]; + flag = 2; + break; + case 3: + job_second = [NSArray arrayWithContentsOfFile:fullpath_3]; + flag = 3; + break; + case 4: + job_second = [NSArray arrayWithContentsOfFile:fullpath_4]; + flag = 4; + break; + case 5: + job_second = [NSArray arrayWithContentsOfFile:fullpath_5]; + flag = 5; + break; + case 6: + job_second = [NSArray arrayWithContentsOfFile:fullpath_6]; + flag = 6; + break; + case 7: + job_second = [NSArray arrayWithContentsOfFile:fullpath_7]; + flag = 7; + break; + case 8: + job_second = [NSArray arrayWithContentsOfFile:fullpath_8]; + flag = 8; + break; + case 9: + job_second = [NSArray arrayWithContentsOfFile:fullpath_9]; + flag = 9; + break; + case 10: + job_second = [NSArray arrayWithContentsOfFile:fullpath_10]; + flag = 10; + break; + default: + job_second = [NSArray arrayWithContentsOfFile:fullpath_0]; + flag = 0; + break; + } + [view_second reloadData]; + + // [self tappedCancel]; + }else if(tableView == view_second){ + /** + * 三级菜单 + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_third(0).plist" ofType:nil]; + NSString *fullpath_1=[[NSBundle mainBundle]pathForResource:@"job_third(1).plist" ofType:nil]; + NSString *fullpath_2=[[NSBundle mainBundle]pathForResource:@"job_third(2).plist" ofType:nil]; +// NSString *fullpath_3=[[NSBundle mainBundle]pathForResource:@"job_third(3).plist" ofType:nil]; +// NSString *fullpath_4=[[NSBundle mainBundle]pathForResource:@"job_third(4).plist" ofType:nil]; +// NSString *fullpath_5=[[NSBundle mainBundle]pathForResource:@"job_third(5).plist" ofType:nil]; +// NSString *fullpath_6=[[NSBundle mainBundle]pathForResource:@"job_third(6).plist" ofType:nil]; +// NSString *fullpath_7=[[NSBundle mainBundle]pathForResource:@"job_third(7).plist" ofType:nil]; +// NSString *fullpath_8=[[NSBundle mainBundle]pathForResource:@"job_third(8).plist" ofType:nil]; +// NSString *fullpath_9=[[NSBundle mainBundle]pathForResource:@"job_third(9).plist" ofType:nil]; +// NSString *fullpath_10=[[NSBundle mainBundle]pathForResource:@"job_third(10).plist" ofType:nil]; + + NSLog(@"%@",[_title_table_1 objectAtIndex:(indexPath.row)]); + NSLog(@"Flag = %d", flag); + if (flag == 1) { + NSLog(@"%ld", indexPath.row); + + switch (indexPath.row) { + case 0: + job_third = [NSArray arrayWithContentsOfFile:fullpath_1]; + break; + case 1: + job_third = [NSArray arrayWithContentsOfFile:fullpath_2]; + break; + default: + job_third = [NSArray arrayWithContentsOfFile:fullpath_0]; + _msg = [_title_table_1 objectAtIndex:(indexPath.row)]; + [self tappedCancel]; + break; + } + } + [view_third reloadData]; + }else{ + + NSLog(@"%@",[_title_table_2 objectAtIndex:(indexPath.row)]); + _msg = [_title_table_2 objectAtIndex:(indexPath.row)]; + [self tappedCancel]; + } + + + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: text:)]){ + [_delegate didSelectIndex:indexPath.row text:_msg]; + return; + } +} + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect +{ + // Drawing code +} +*/ + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Classes/DownSheetCell.h b/DownSheet/DownSheet/Classes/DownSheetCell.h new file mode 100755 index 0000000..b1efbdd --- /dev/null +++ b/DownSheet/DownSheet/Classes/DownSheetCell.h @@ -0,0 +1,28 @@ +// +// DownSheetCell.h +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface DownSheetCell : UITableViewCell{ + + UIView *backgroundView; +} +@property (strong, nonatomic) UILabel *InfoLabel; + +-(void)setcell:(CGFloat)x; +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Classes/DownSheetCell.m b/DownSheet/DownSheet/Classes/DownSheetCell.m new file mode 100755 index 0000000..2e84d93 --- /dev/null +++ b/DownSheet/DownSheet/Classes/DownSheetCell.m @@ -0,0 +1,58 @@ +// +// DownSheetCell.m +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import "DownSheetCell.h" + +@implementation DownSheetCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + + _InfoLabel = [[UILabel alloc]init]; + _InfoLabel.backgroundColor = [UIColor clearColor]; + _InfoLabel.font = [UIFont systemFontOfSize:12]; + // [self.contentView addSubview:leftView]; + [self.contentView addSubview:_InfoLabel]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + } + return self; +} + +-(void)setcell:(CGFloat)x{ + _InfoLabel.frame = CGRectMake(x, 0, 140, 40); +} + +-(void)layoutSubviews{ + [super layoutSubviews]; + + _InfoLabel.frame = CGRectMake(15, 0, 140, 40); +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + if(selected){ + _InfoLabel.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; + }else{ + self.backgroundColor = [UIColor whiteColor]; + + _InfoLabel.textColor = [UIColor blackColor]; + } + // Configure the view for the selected state +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Classes/job_first.plist b/DownSheet/DownSheet/Classes/job_first.plist new file mode 100644 index 0000000..a63f221 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_first.plist @@ -0,0 +1,50 @@ + + + + + + first_kind + 不限类别 + + + first_kind + IT/互联网/通信/电子 + + + first_kind + 产品/设计/运营/策划 + + + first_kind + 人事/行政/管理/外语 + + + first_kind + 市场/销售/商务/公关 + + + first_kind + 广告/媒体/艺术/编辑 + + + first_kind + 金融/教育/法务/咨询 + + + first_kind + 房产/建筑/土木/物流 + + + first_kind + 生物/医疗/餐饮/体育 + + + first_kind + NGO/环保/公益 + + + first_kind + 机械/重工/电气/材料 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(0).plist b/DownSheet/DownSheet/Classes/job_second(0).plist new file mode 100644 index 0000000..6876d07 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(0).plist @@ -0,0 +1,10 @@ + + + + + + second_kind + + + + diff --git a/DownSheet/DownSheet/Classes/job_second(1).plist b/DownSheet/DownSheet/Classes/job_second(1).plist new file mode 100644 index 0000000..61f09a9 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(1).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 软件 + + + second_kind + 硬件 + + + second_kind + 电子 + + + second_kind + 通信 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(10).plist b/DownSheet/DownSheet/Classes/job_second(10).plist new file mode 100644 index 0000000..37f2593 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(10).plist @@ -0,0 +1,18 @@ + + + + + + second_kind + 机械 + + + second_kind + 电气 + + + second_kind + 材料 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(2).plist b/DownSheet/DownSheet/Classes/job_second(2).plist new file mode 100644 index 0000000..54c3503 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(2).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 运营 + + + second_kind + 策划 + + + second_kind + 产品 + + + second_kind + 设计 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(3).plist b/DownSheet/DownSheet/Classes/job_second(3).plist new file mode 100644 index 0000000..ddc5060 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(3).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 人事 + + + second_kind + 行政 + + + second_kind + 管理 + + + second_kind + 外语 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(4).plist b/DownSheet/DownSheet/Classes/job_second(4).plist new file mode 100644 index 0000000..fcbded3 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(4).plist @@ -0,0 +1,26 @@ + + + + + + second_kind + 市场 + + + second_kind + 营销 + + + second_kind + 商务 + + + second_kind + 公关 + + + second_kind + 客服 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(5).plist b/DownSheet/DownSheet/Classes/job_second(5).plist new file mode 100644 index 0000000..57f42e4 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(5).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 广告 + + + second_kind + 艺术 + + + second_kind + 媒体 + + + second_kind + 编辑 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(6).plist b/DownSheet/DownSheet/Classes/job_second(6).plist new file mode 100644 index 0000000..fc6ccc1 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(6).plist @@ -0,0 +1,34 @@ + + + + + + second_kind + 财会 + + + second_kind + 银行 + + + second_kind + 投资 + + + second_kind + 法务 + + + second_kind + 咨询 + + + second_kind + 金融 + + + second_kind + 教育 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(7).plist b/DownSheet/DownSheet/Classes/job_second(7).plist new file mode 100644 index 0000000..d333d34 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(7).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 房产 + + + second_kind + 建筑 + + + second_kind + 物流 + + + second_kind + 土木 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(8).plist b/DownSheet/DownSheet/Classes/job_second(8).plist new file mode 100644 index 0000000..802bc9b --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(8).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 医疗 + + + second_kind + 体育 + + + second_kind + 生物 + + + second_kind + 餐饮 + + + diff --git a/DownSheet/DownSheet/Classes/job_second(9).plist b/DownSheet/DownSheet/Classes/job_second(9).plist new file mode 100644 index 0000000..9160e25 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_second(9).plist @@ -0,0 +1,14 @@ + + + + + + second_kind + NGO + + + second_kind + 环保 + + + diff --git a/DownSheet/DownSheet/Classes/job_third(0).plist b/DownSheet/DownSheet/Classes/job_third(0).plist new file mode 100644 index 0000000..b321d98 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_third(0).plist @@ -0,0 +1,10 @@ + + + + + + third_kind + + + + diff --git a/DownSheet/DownSheet/Classes/job_third(1).plist b/DownSheet/DownSheet/Classes/job_third(1).plist new file mode 100644 index 0000000..56d8af9 --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_third(1).plist @@ -0,0 +1,54 @@ + + + + + + third_kind + 前端 + + + third_kind + C/C++ + + + third_kind + Android + + + third_kind + PHP + + + third_kind + Hadoop + + + third_kind + C#.NET + + + third_kind + IOS + + + third_kind + Java + + + third_kind + 测试 + + + third_kind + python/Ruby/Perl/Node.js + + + third_kind + 数据挖掘 + + + third_kind + SEO + + + diff --git a/DownSheet/DownSheet/Classes/job_third(2).plist b/DownSheet/DownSheet/Classes/job_third(2).plist new file mode 100644 index 0000000..d65bcaa --- /dev/null +++ b/DownSheet/DownSheet/Classes/job_third(2).plist @@ -0,0 +1,18 @@ + + + + + + third_kind + 集成电路 + + + third_kind + 嵌入式 + + + third_kind + 通信 + + + diff --git a/DownSheet/DownSheet/DownSheet-Info.plist b/DownSheet/DownSheet/DownSheet-Info.plist new file mode 100644 index 0000000..e5ef473 --- /dev/null +++ b/DownSheet/DownSheet/DownSheet-Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.test.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + + diff --git a/DownSheet/DownSheet/DownSheet-Prefix.pch b/DownSheet/DownSheet/DownSheet-Prefix.pch new file mode 100644 index 0000000..743435c --- /dev/null +++ b/DownSheet/DownSheet/DownSheet-Prefix.pch @@ -0,0 +1,16 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#import + +#ifndef __IPHONE_3_0 +#warning "This project uses features only available in iOS SDK 3.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/DownSheet/DownSheet/Images.xcassets/AppIcon.appiconset/Contents.json b/DownSheet/DownSheet/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a396706 --- /dev/null +++ b/DownSheet/DownSheet/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DownSheet/DownSheet/Images.xcassets/LaunchImage.launchimage/Contents.json b/DownSheet/DownSheet/Images.xcassets/LaunchImage.launchimage/Contents.json new file mode 100644 index 0000000..c79ebd3 --- /dev/null +++ b/DownSheet/DownSheet/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "subtype" : "retina4", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/DownSheet/DownSheet/Receive_email.h b/DownSheet/DownSheet/Receive_email.h new file mode 100644 index 0000000..23f7001 --- /dev/null +++ b/DownSheet/DownSheet/Receive_email.h @@ -0,0 +1,27 @@ +// +// Receive_email.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#import "work_cell.h" + +@protocol EmailDelegate +@optional + +-(void)didSelectIndex:(NSInteger)index text:(NSString*)text; + +@end + +@interface Receive_email : UIView{ + UILabel *title; + UITableView *view; + +} +-(id)initWithlist:(CGFloat)height kind:(NSString*)kind; +- (void)showInView:(UIViewController *)Sview; + +@end diff --git a/DownSheet/DownSheet/Receive_email.m b/DownSheet/DownSheet/Receive_email.m new file mode 100644 index 0000000..e7da52a --- /dev/null +++ b/DownSheet/DownSheet/Receive_email.m @@ -0,0 +1,144 @@ +// +// Receive_email.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "Receive_email.h" +#import "email.h" + +@implementation Receive_email +/** + * 程序调用入口 + * + * @param list <#list description#> + * @param height <#height description#> + * + * @return <#return value description#> + */ +-(id)initWithlist:(CGFloat)height kind:(NSString*)kind{ + + + /** + * 实质上在传值的时候会有 + workday = list(解析json所得到的数组) + 在这里使用本地数据,所以只传已经从本地读完数据的的array + */ + + + + + + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:kind]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + /** + 装入具体信息的table + */ + view = [[UITableView alloc]initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, height) style:UITableViewStylePlain]; + view.scrollEnabled = YES; + view.dataSource = self; + view.delegate = self; + + [self addSubview:title]; + [self addSubview:view]; + [self animeData]; + } + return self; +} +/** + * 弹出动画 + */ +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(view.frame.size.height), title.frame.size.width, title.frame.size.height)]; + [view setFrame:CGRectMake(view.frame.origin.x, ScreenHeight-view.frame.size.height, view.frame.size.width, view.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [view setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 1; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + + static NSString *CellIdentifier = @"Cell"; + email *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + [cell setcell:0.]; + if(cell==nil){ + cell = [[email alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + [cell setcell:0.]; + } + return cell; +} +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50.; +} +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/DownSheet/DownSheet/Resouce/icon_add@2x.png b/DownSheet/DownSheet/Resouce/icon_add@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..ba11a45a0231c1f36c1bd88c1272541a80a00bf5 GIT binary patch literal 1275 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8W==-Nu5PBz25tr}hK8;tjs_OSE|!MQuEvfQ z<`#xVFugAM$)&lec_lEtDG0qTIQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b5vO@j zy(zfe;)GMLKF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q?;Dwj9Cl}j0K)9jv*Dd z-rPRzb=X0I^}+s?x8H1ecUMip#qn)(MvTdBo6xeChfX(3v`Pu2MawVPb^6xn`VGtr zOD?W5NqHt?vHHum(o4%^f3OFNcxpF(^QvBJdtJ`M{`0chEB7+q_ZZIqc3=Uk-KBfk z{zul@Wb2Fmy~V~Ho$3B4P3#u;0>)#Rf0o#aZa2O>k8yTY!_=jQtQAWCQiLit?J_&g z@V=Twj`dM^+rGxugeFe49pN``UlpF3s_8jtjcwTVttpYmMAc@1WI)8b(ha`9zuvYM zcis3g_p!w^1D@-0*|Xew45jVE<~_gLu)T8Pf5|!X5@zy)t2GRN-U(JPemJB2f%`yk|AFB5Z8jV9dll7qs%$!LC);SU zZF{r*ON{lj`3u#qGhL3@So}Lb^Q%#+`$vO?Wh-RAy}h(KCUDN7?HSb~@1q+S8BVvx V@ioj}Y5^*aJYD@<);T3K0RREy#>xNy literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_add_hover@2x.png b/DownSheet/DownSheet/Resouce/icon_add_hover@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..97e47efcc4424aa4decf00bc6369cc40323c775e GIT binary patch literal 1263 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8=1!)j#uhHF25tr}hK8;tj!uq-7N%w{CMM1< zPR=d{FugAM$)&lec_lEtDG0r8IQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b8K-$r zy(zfe;(}AJKF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q}x;x8)X?77*jl5978H@ zy}7;D>u`Yx>xbK~W}SVtE_<2Al^-m2j@?{0KZV?63i`_Wh4W8?l)$EK*$4Y(W>@K% zsCu-EEmizq%_rmG8T~8!lG@)Lb2sTMou+5yl7GQ_i~8F$GPUmRFO+`;uYGal!15Qu zReE_(g=H69wu;!8|6=2gnfWFmTbfGE|2gO%dE0YwUsL|Z0)4ZhL}nbYgsj8`OydtwHXOboFL+MVV30a zkJqlB{T$P^=*Et7pKU(Y*1!JkHED_D2R;5z_KW@H$}@pVZ@BRNFM4diBW`zN)C<-nZ@?Qs^)@kiep&eJXllD`tP z#jkLu#fqhu%O=0t@a6a8B-5_tAB4Xw$Zel@RqSf)kHo8AHSPs9Ff!bqwI|`!o7!`r OBFNL#&t;ucLK6VEc*b7< literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_album@2x.png b/DownSheet/DownSheet/Resouce/icon_album@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..f5c249bb8bd035d0a55897fbe0a4afb568e3a023 GIT binary patch literal 1907 zcmaJ?X;2eq7{+Rm!vheoR;g>mgJQDTgdOe>qvW4u1WHG@iVklO$ zDiy^lj-m*~K?NCXQ8@$=M7)54BIAh3h@hfU4?;od#)9@o>CWta$2`yTKJWLw-)u(6 z%H>n-zO=KlvYILk;)RlCaiv7QF<#DAPy+k`KRrwes1QO1=v4`r7S?kpA9P`IZrKJYzy}Bs z&!PNdN-7QkxVQ!ZylLK4IUVu>eAzU}8}ed7O8^EPVuExg2r;P;1E#ZK$Qu}aC}cE^ zA{Gwi2}Wa)D-K0T5Na3%bvhkQ$E4w!I1pm9*&v+(G8j}6LDeQ>giKGxwDZRlc!*Z6 zLDd9`V}M0b7K0}d917|5pA=N;kFuC{^q9y41NAaB2+`=4l*WK!@&7|rs*h+b5sG~B z`=7#ENwOLNLlG^Wq>+<_i=A%?rG~j0L`L8m363X>onnX*CvdG2R|8xwus8z66u3_7 z@c}Lt!$M3;$S^q~UX~sqZ<$1Y?^%vGNV3|wp%}>q()TH% zyU(n1exel5b*26#l{iUz3iw6a7YCM}3QD_Hwuc|yS(xtN^mE|rvy1iu@leEMo|U&LK|EH%X;DDbaAb7eTz>y|qs;j@FnjSzFtENocG ztZAxArgzNKLA|WW*@crL*g?;v%|l^^6>f0UX)~T3o8$89gm<~K%hC>X%`n@x)Xd48 z9&RwOsQV+ouG!G(dwUXX>wxRM$A-S>nZFzi&S)!3YBN~2rV`0q9t=!xx!TUG8pIv4!b)7dVLWd`BI$rjmg~(m+w8d^!pnpl&yzr7O z_6>!m6v0ztV%e4-(O8v4!Mc&_V_533zth)~QB`jfJ6vw-KQ%=-9Jh?W5ArOpZdM*% z1ApE+VO_Qv-P_?NPk2%tZmh12JmgyQ`=#j_BPYaKZe`ta)BW}Z<|B2#J2)j3@C)XN1nP|Y(*{?QSo_2cI9p$m@cjPZQtx4$*M4NVs@6GkuzTjze z^)-=umF~i%rqaBQg?*ir*ICHgIT4-RGS<(gD_=|BRt_m!QqpRxn@`+|+iBXpv&%1| zcu}z3cT46s56Ks9R-Aw1x87jyUe!+5)os3A8=qib?Rzn%RG)q!JHL%0wRVdK^&N}7 z*o}`|O#zSerHSX(J$w^=p>E5i0(ODGnAhLl>*O~zA^>iQEY-@7a-7Y)446cx2Ojm!=4FodlrYHL`HMK!+L6@FSetDe)J`=|J9-P|ra zfi3PVaDKPk{K^Rfhp1uDo*7vkVXepE)+EPM^tT>9vmR9p-=27Ja9#VcZ`h`#@Er^xXN1ksD`CK;O;$lf$C@{9 z-^>H$Wg&Hg2l#@TDE_7+j#)O-^Db8vV!hKI20xY9`sZC$@9hX$l_sK7CrGRYmhw&= zed7n^aWYQ?PBxoYM6S9UdFaTMY<7RsVdMK-X``3xqG5f_y=TQ%6Rm!% W?Tb2oW8YVn-=L7cl6NLB+VD3N6cVNY literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_album_hover@2x.png b/DownSheet/DownSheet/Resouce/icon_album_hover@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..0352971503e15d88d2b4ed634deb469e7cf82092 GIT binary patch literal 1718 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8&XxvF1||mP25yE1hK8;tj)rEAE+)pVmgW}D z<_50jFugAM$)&lec_lEtDG0q5IQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b6sLJm zy(zfeVun+%KF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q?=Np+joJPMcdQGF{I+w zn_0F#B90=*zw<4gAWvl>MU4Z&8x0*<8*#Ax@nO)~a?a7hihF z?N5h1YtzC2?W5e7@;bHlM zh96WKB68%M!)H7JW)Y|kkL7cbFP~$@X7l}U;zGN>@ zU#6({{)0}&v^|q=A1F0YesTVfbHZ*FH{-jm7|{Y_$h`C3{B z_goH~yX0@d#JaSvUEg_K4bF2F_B{_bc)$0zN@l&o1AC2^lf(DqYc!b`)l8oBO+0hr zrkL()te*45W$w4FU`e;wXD#P{L}Lfzu9sG?43qa%^s4qpTt4`?GKODnSKqYX2R(%P zrmL;t{#IHb zI9+qSNTiQ7|%V)cA$9Bs~eZdbV|_jmp?um8c^ zn=fD6zpB=XG3n;5i;159wrxpxbL5KW%?{C2jW5!B=h>EYZQjG8eys-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8&PIl2#+GJIh6b(%hK8;tP9`Rf7M89iMg|7X zMn-OiFugAM$)&lec_lEtDG0sJIQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b5~q1k zy(zfe;)qkPKF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q#ETpcM1aoW1OdpV@SoV zH@9rPm>ngKeXJ3k)G(o8?GfWONe>m@CRi_9|r-09pL+;I*b3#V>qblDIf zG5@HDqlc0H8qc(E{|`BH@SOhl$*)baZ1uUFUNcvPX+|=#@kkgX9B5$7UnA8WKS`yN zZ^kms;Ht>2Q>vf3{tUa*_dK{VsOnyD)xue)JS=%vR92tr{Iozu`}#D#`z&pLqr*?_ zWUUcAcza{*iV2%u5Z7 z%zT+szu8*$PW@||Y}B9K`+WXg)9;gVnfAQOdDHX!xu@gxL@)81iQyL{<`?$yd|`fcm?8r92}WL!owTy#2X-phAto M)78&qol`;+0FL&!ng9R* literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_buy_hover@2x.png b/DownSheet/DownSheet/Resouce/icon_buy_hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..851082468328609537ed7de23fb4095d61be4db3 GIT binary patch literal 1234 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8&K7RYW(JNHh6b(%hK8;tj;6*ImTs<&t_Chf z#unyIFugAM$)&lec_lEtDG0rmIQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b45xWe zy(zfeVvbXD{|Mj^^jy{BLb<6`1zt)46l(v#p*_QVZ42j9_HrkuXR&(7?#d7Q?(_@g42+ zr`jL=t28?mA~~h;a?|BY3ys2lHJW{L+_|yjhgm{Sob%IDO#AvC6v{>%NEd9V7Avr3 zDwv(>SsL)+rxMfcQ=4=)US@(A`F;Dx6G|UTYt7|0zHtkhmw2FIwxRd*b0zUv>tsS} z)IaaIUQ=zm{)cX)?1N34HyY2IFTTG-zHQ5QtD{zDmVEsie=FH?-b4Er9}0yJ-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8ZjR=r7H)2ih6aX?hK8;tj>Z;lPNt@orWVd7 zMkbEVFugAM$)&lec_lEtDG0qzIQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b0;hRU zy(zfeVu@3)KF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q}xRi4I&H-jJG{q978H@ zy_vmH-`P>-`1(&uSsJDW#$ArLH)I@Xx;kHB;|-sdqY6{KBqNR-OEQWu^bDWaF=N-w zoUDuvliGdi?U%o3hOU42?zgwyOYim5%jf@jcW?dsIO&hI@jFCv4{iJqv~tR3Nxz2R z0H%GaQ>FwzvOWANbeSc;m9F=SFEg1k4fyo#8_n4our11Fb$W%)gJ#zP=6O7VuNj;d z>~@Qe5?^<2-JJic71-zTo=&rlV9Hilv{(M`DxKVhp2kg1y_Sn*_Jy{e*4n(x-EZd= z(S5<$*S~0JP2Y7$w0qq-(dYZ4f@T~NS!U3x>66G63}?ExCO`W8ZP`k}K)uq|r)uAp zupYX+=vZ6Lg(>%#YuQep+W7uj)(0l5FU{E-nAf#fN`Lya@~}Y!!(Mwqu~mny)?X4a z)7~RC=W|Sr&F6{F=WmFuV6$2ASWoa%vCg{0@M{H@M_$@;%Uvxrak;)pFNUF6ac;$K z*OR(0f~zh!-rTd4TfQMRchyaiOPQ>1_TO_-o$R^Skk2h-XNJkM0~wRqs+s!gFUC*X z&s`uN(w=%aQutNQ9?wJDA9SR4g1r*k`O4~!hfdSa3CFbSA6DOZ_4}cmfxx7Kp5R%B n>i4(Jd{{p>@%q26?@9+4CM1@Jcvw5G0F`{6u6{1-oD!M<^Rxb` literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_computer_hover@2x.png b/DownSheet/DownSheet/Resouce/icon_computer_hover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7257a72ebf8148a35068703ead4efa1eeca2ff21 GIT binary patch literal 1376 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh81}5faPOj#Th6aXChK8;tPDZAdmKJ8l#>PM~ zV@Fe%UYGpj(%jU%5}4i;gkC3{dO;~6w*Y9fOKMSOS!#+~QGTuh*vD3xxZPrb(>$o& z6x?pH#Hm*w=oo!ayduRjObD2GKumb51#;l&J~a=R*o%OvT606Y5(5L{RZkbkkcwMx zX7AT$ag=CFe^TUFSf{c=GjIn-r<=*5uj(EqR#RJCrj)bx?r(5gdSQ`JuagSbmPOVg z8hjH^uPeWkV`RCx!@9ccS?y%?op+vX`h2J6{<)Ozer<^wHD28xbmF+5A7s>Mz94w& zmZrR?*WJU5A4qJmw%T|;L1>PvaZE`>SjP56mWQ88JajK$j0;w}#?|Jy{OOI;?Tdx@ z?9~}oE3EEc-nmAuI^m;G;h|QMu4_RXINeoq-`Qy`aGzd0Yw@XHaw$FEm*mRoSt>}! z)_d9CtYG1boy+`gi-u1kSMZEOBFhX~HDSyR^AA}n$QDe#^)x!MbbJ0S#)p!LI~DVH z`>rnHRXdRDmHPVt=Zp1UdxgVxGS7Y>vuCM`3Aft;r59VL{tQ2)=k`hKZIzL)#q)_P z?Dlt^v!9ybYre4kYS70e@#P&U^OHBW?|u2utLd+e`YL<-fK2ZTTa&(hP?adDDO!IZ zAmq|(xscCoHxJ)VxT#?}ebJn-1Jfce1@1a9BTlbwcBR3+1qa_X@3pd9KW%^T2Z8M$ z1K9aq%RE{0?~&9*=?$k-JHZ~Q?aVna-)7nYC#T1;%+_c3F<#(h6B0VNaf#-i@3vMkSH*~ z+LCB#W@ctB*u)j%;|9}9Sb%>a<3kNTEXR1E*mg7q)4>|V%uk9&BY;2&$0A|`mL|rx zAUMNfl{_dE3l(mGB&d=Mn=oX(QjN25v5k5)EQv!fAR394tJtJJum4H{%gejy7 z)f_}7-;|_5wkHJ!Ns{6uEGcQDFR(!m;Q~qog8{u#q0&NnHfc&1!sn)K3JI8kU~z2H z$D~4qB7lQx5P(T$dP=Au1Mp^%K_+EC^%*(+>%crjf=# zVlIC=7QSMWWEiG~C={JeN7m8Fs3w*IvREt%l}4e_JaL4lHc^GadQX+sWk!LEXeAoC z8k3_cz@!LAqX`(BglGD(1f_abR;8V86W%b29#&I8GSyVl3{WWif2dM9i`HUdIbMKTmawK7xa^>o z;6foJP-!t(B|!vSHVGFX%jHst@6Dw%Ko*_K2dN;)!`sdD;&HubAdSxS2lGcn-0T|M)dAa1I^&mRwSemvq<{4K$JRLeZA&uTRuyF~z2v*d zzsw<$pklmfa&*sf2>)FcaxK2kzsRn)rW%k%5~9}qZ7UL;Ds(RMl2Zd$4+VJ8U-|}nCv8c?#UF88iM3pX^ToGp&ilGAXt;sgIS8P=q0^yVN?_nsrf2>@_djXK-ApTX5l2&S2`(n#~bB zuMdHOq{rFD;(XsqGw5NiFmmkme7dvpiw0%=$TwwagO%?HD+q7htG=sDX4ma5yY;3o z@)pwEZA&hN$~)~MhEIz>(*$?UK$U%Yc=$9Ud@J5MGE?e7i7 zt5D1Y*;Z~7Zj+}7Gx&^$**bDuBNZd_k{zxzf)2$chrRs-E~o1K&&J-iC)Td1@QFS? z#8g`u=I_ty^=>m>O&ckIebCl3xv#_%WyOT-_WaZC-&V&{-KVTRm)v3hw^Nx$&}$NqfYgWCx`OI@OL zM+W(oHwx1BrgvpD&;;cDg1%k%2Y+Z$Am zPc~cZBzEL(9nB-XmKk!EIW5mG*gVM<4dhvgy3^J+3u|QQ&&d~hUPJUv#F ckGVCN*#%z@$sgGJ$n*;l@B+CN{<{wT1Jj_-Z5d&5H4 zEvDJg3=9kwi$a7FYV^^+3r(mmfBGIy4Yp)Z6d8^skZKr54E*I-JOYRma3Uf>V0n6K z3qmoB9MOmwhmXR#u$?1N+fRBbx2`CT}1~iHkCBfGS=rg)}YOddA(SaEVnJl1x zNGeJk1_WX_0&tmJh75!}052XB;zAyuLu&yx2ys{-hXrvM5StJ3_z)MEedts)T%N#} z2!m&1Q7ZvGi6m8g7E7&GGu0d>h9|Nh9*@TY*(^4jK_M7Kx{`!73?<<-ryxWK8IGz* z6jK6vMK~TyBL#FS(+?#mR3BxP#B7_WhOsoTiUl!2eMxgbvH1U?3dKh>K}wK+^8HU? zA|hRdup|h9rQtH_;1Znlp;Y`p9Dzv;kHD~$xh{q!VI)Q*VJaXn5O9k`m2yl?te%03 z#e9*HAYr8p5eWr!N`Q%?a(=MT%ag+m@Bo7$5Q2iJc6)Gw0z86)yn-M$j|;5F6?>rX1VhDbK%U(Wl_nn^ym7o zbDrCx%%h)vbS<^`=zBy-nH{HG{lKa7oc^+ig#HnlUR^<3vZcSx)vn@2RaVUhi)Zj)9cD$VE*TR=@g3Fn z=3g82S!xWnW%qK}E7DPVj3n9lZ{vLXrloC@6|H@Mn{e2n@I~7j!@Fp2=cMzg zw<(9SC(g0fxDH&89 z19s?8?q8;B0!+)E+~heAZ0dic*xxTYML2_DiMJLg6FcSJ<|jWbJWQ=L}X7qiYE?9S+z9{ww&2)-CK6}=i`;?knkV7ES>6{tLyEy z-5HB^>ne6}|3aPra4_VJMO}Z2u7;yCzi(e?;^p5#&y$|YAy&JWUr#U7f+=;QT(~we zGj?zL!dm0oH);i$DUz#WNbE*S7e6?*e|PJUkDncxap-kJZRBHFmlIU8qCE%+*}_eZ zZfAQsHdo`m$D+JY9%T_K2IUl$sm;r*BjMfqw%0^!JtKJ=zvrN~_GG1dbk{X`-Dzm8 z*7`{MP!_{62jW!#MX&{qjJ*yL<2eI5_@cOF1}j`8h|hN V_%7=IQm6lah=M|e)d6uk{|3S)rVs!C literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_down@2x.png b/DownSheet/DownSheet/Resouce/icon_down@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..3e114b6ddc359a9d3a03ea5c4a6919436f497634 GIT binary patch literal 1442 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh81}=uC2Il7G25yE1hK8;tmKG)!u9l9*&MxL| zhDMeKFugAM$)&lec_lEtDG0q5IQ4>3LT&-jW|!2W%(B!Jx1#)91+b5;GI6`b6sLJm zy(zfeVun+%KF~4xpm;@!XP6K$@qn1{R14(5(|u|lFtHZ_Q?*3Vz8VGwCUH*}$B>F! zZ)WfJKI|ZJJXrT==wJ3f^1tLQG`O@hxMXGia=ub?EeI_L;^MmGsa_aVP+EQ>qO<+qA9!DmdH2h1=jo?=t!EX-UOzSIsl<#%NekNpN0SV< zF4&e^U)v|~?=Djbqp4zhAGez9328RF=5O`2;>X_y+?>L^th(av<2!Ah>^{u?8uPq) zKV0Z-lmr?8M;2`d{_cGDvtegm<14GcCugiaKl~T-oncl}*n)XU(u*(HZjlH*w`Ozu z-lDszD})yGddaW(HYZZO;QI4FeM#@9yo}O6eN^y=Ur-rSuIDN9ms0k-FFsvzF7&kF z3(i^JG~Zt|mfG@0a@OP?1=a4PtDl&o+Oj5bp5%%MTWq$wQ0CI1TNi9Xu3re7dn@a> z?FWIrb56YixgEQVXXVYA=U zg?r_j8=cwPR`&H>xOVyd9;Xfovn{)~?GwN4|9|H@j#XJaxwe15Rq>mz-M^dhQJ-&{ zjPLYG9m^3%DRw udS|1T-5jseId*62KP4ov`E9G^GGJI-IsI^a$O~;ysp;wJ=d#Wzp$PzJsu;ll literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/Resouce/icon_down_hover@2x.png b/DownSheet/DownSheet/Resouce/icon_down_hover@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..8c80a845d71b047138c93044fc7fe7f6556be72b GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|6*EI3N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+8BvVozAg1M!hp{b#X zg`tjuk%6JHzJam6p|P%^k(Gg^m7%Eu6et00D@sYT3UYCS+6CmEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L*lEl2^R8JRMC7=O%nVBh8Zmt#^=fWJ)|xxlWOfZPu`h*q-#+|(wsw!3|cjP9-19p^6atY z0&XUOQ=1ll<#{A`twVh2$FaCKSx3!)gA^!c#pA~%%_cTX}ECcCCh_o3+nIM6-E80V=E@ANf3u3%map3@bzHOb-Y&WJ9jYy{vi*gp zmUZ|pDXVK-vtDB>?#;S<+r^cy>`qV3dvw(FwdM`R&AOts)BCJ_ luHC9po(I-^=jrO_vd$@?2>`8^{1gBH literal 0 HcmV?d00001 diff --git a/DownSheet/DownSheet/ViewController.h b/DownSheet/DownSheet/ViewController.h new file mode 100644 index 0000000..d9844d6 --- /dev/null +++ b/DownSheet/DownSheet/ViewController.h @@ -0,0 +1,19 @@ +// +// ViewController.h +// DownSheet +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import +#import "DownSheet.h" +@interface ViewController1 : UIViewController{ + NSArray *MenuList; +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/ViewController.m b/DownSheet/DownSheet/ViewController.m new file mode 100644 index 0000000..6d5571e --- /dev/null +++ b/DownSheet/DownSheet/ViewController.m @@ -0,0 +1,76 @@ +// +// ViewController.m +// DownSheet +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController1 () + +@property (strong, nonatomic) UIButton *button; + + +@end + +@implementation ViewController1 + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + + [super viewDidLoad]; + [self initDemoData]; + + + + _button = [[UIButton alloc]initWithFrame:CGRectMake(50, 50, 210, 100)]; + [_button setTitle:@"弹出菜单演示" forState:UIControlStateNormal]; + [_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [_button addTarget:self action:@selector(clickMenu) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_button]; + + // Do any additional setup after loading the view. +} + +-(void)initDemoData{ + + MenuList = [[NSArray alloc]init]; + +} + +-(void)clickMenu{ + DownSheet *sheet = [[DownSheet alloc]initWithlist:MenuList height:0]; + sheet.delegate = self; + [sheet showInView:nil]; +} + +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + + + + [_button setTitle:text forState:UIControlStateNormal]; + +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/Work_Day.h b/DownSheet/DownSheet/Work_Day.h new file mode 100644 index 0000000..8923062 --- /dev/null +++ b/DownSheet/DownSheet/Work_Day.h @@ -0,0 +1,32 @@ +// +// Work_Day.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#import "work_cell.h" + +@protocol WorkDayDelegate +@optional + +-(void)didSelectIndex:(NSInteger)index text:(NSString*)text; + +@end + +@interface Work_Day : UIView{ + NSArray *workday; + UILabel *title; + UITableView *view; +@public NSString*test; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height kind:(NSString*)kind; +- (void)showInView:(UIViewController *)Sview; +@property(nonatomic,assign) id delegate; +@property (strong, nonatomic) NSMutableArray *title_table; +@property (strong, nonatomic) NSString *msg; + +@end diff --git a/DownSheet/DownSheet/Work_Day.m b/DownSheet/DownSheet/Work_Day.m new file mode 100644 index 0000000..719c56a --- /dev/null +++ b/DownSheet/DownSheet/Work_Day.m @@ -0,0 +1,184 @@ +// +// Work_Day.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "Work_Day.h" +#import "work_cell.h" + +@implementation Work_Day +/** + * 初始化方法 + * + * @param frame <#frame description#> + * + * @return <#return value description#> + */ +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} +/** + * 程序调用入口 + * + * @param list <#list description#> + * @param height <#height description#> + * + * @return <#return value description#> + */ +-(id)initWithlist:(NSArray *)list height:(CGFloat)height kind:(NSString*)kind{ + _title_table = [[NSMutableArray alloc] init]; + + + /** + * 实质上在传值的时候会有 + workday = list(解析json所得到的数组) + 在这里使用本地数据,所以只传已经从本地读完数据的的array + */ + + + + workday = list; + + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:kind]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + /** + 装入具体信息的table + */ + view = [[UITableView alloc]initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, height) style:UITableViewStylePlain]; + view.scrollEnabled = YES; + view.dataSource = self; + view.delegate = self; + + [self addSubview:title]; + [self addSubview:view]; + [self animeData]; + } + return self; +} +/** + * 弹出动画 + */ +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(view.frame.size.height), title.frame.size.width, title.frame.size.height)]; + [view setFrame:CGRectMake(view.frame.origin.x, ScreenHeight-view.frame.size.height, view.frame.size.width, view.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [view setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return workday.count; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [workday objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + work_cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + [cell setcell:0.]; + if(cell==nil){ + cell = [[work_cell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + [cell setcell:0.]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"data"]; + [_title_table addObject:cell.InfoLabel.text]; + // Configure the cell... + return cell; +} +/** + * 设置每一行的高度 + * + * @param tableView <#tableView description#> + * @param indexPath <#indexPath description#> + * + * @return <#return value description#> + */ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 45.; +} +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + work_cell * cell = (work_cell *)[tableView cellForRowAtIndexPath:indexPath]; + + test = cell.InfoLabel.text; + NSLog(@"%@",test); + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: text:)]){ + [_delegate didSelectIndex:indexPath.row text:test]; + return; + } +} +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/DownSheet/DownSheet/email.h b/DownSheet/DownSheet/email.h new file mode 100644 index 0000000..590a107 --- /dev/null +++ b/DownSheet/DownSheet/email.h @@ -0,0 +1,24 @@ +// +// email.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface email : UITableViewCell{ + UIView *backgroundView; +} +@property (strong, nonatomic) UITextField *InfoLabel; + +-(void)setcell:(CGFloat)x; + +@end diff --git a/DownSheet/DownSheet/email.m b/DownSheet/DownSheet/email.m new file mode 100644 index 0000000..16fd1ba --- /dev/null +++ b/DownSheet/DownSheet/email.m @@ -0,0 +1,48 @@ +// +// email.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "email.h" + +@implementation email +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + + _InfoLabel = [[UITextField alloc]init]; + _InfoLabel.backgroundColor = [UIColor clearColor]; + _InfoLabel.font = [UIFont systemFontOfSize:15]; + [self.contentView addSubview:_InfoLabel]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + } + return self; +} + +-(void)setcell:(CGFloat)x{ + _InfoLabel.frame = CGRectMake(x, 0, 140, 40); +} + +-(void)layoutSubviews{ + [super layoutSubviews]; + + _InfoLabel.frame = CGRectMake(0, 0, ScreenWidth, 50); +} + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/DownSheet/DownSheet/en.lproj/InfoPlist.strings b/DownSheet/DownSheet/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/DownSheet/DownSheet/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/DownSheet/DownSheet/lowest_study.plist b/DownSheet/DownSheet/lowest_study.plist new file mode 100644 index 0000000..b86f23b --- /dev/null +++ b/DownSheet/DownSheet/lowest_study.plist @@ -0,0 +1,26 @@ + + + + + + data + 不限 + + + data + 大专 + + + data + 本科 + + + data + 硕士 + + + data + 博士 + + + diff --git a/DownSheet/DownSheet/main.m b/DownSheet/DownSheet/main.m new file mode 100644 index 0000000..29d671b --- /dev/null +++ b/DownSheet/DownSheet/main.m @@ -0,0 +1,22 @@ +// +// main.m +// DownSheet +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheet/salary_range.plist b/DownSheet/DownSheet/salary_range.plist new file mode 100644 index 0000000..3108946 --- /dev/null +++ b/DownSheet/DownSheet/salary_range.plist @@ -0,0 +1,30 @@ + + + + + + data + 50以下 + + + data + 50-100 + + + data + 100-150 + + + data + 150-200 + + + data + 200-300 + + + data + 300以上 + + + diff --git a/DownSheet/DownSheet/school_exp.plist b/DownSheet/DownSheet/school_exp.plist new file mode 100644 index 0000000..a71ee3f --- /dev/null +++ b/DownSheet/DownSheet/school_exp.plist @@ -0,0 +1,26 @@ + + + + + + data + 校内职务 + + + data + 获得证书 + + + data + 社会实践 + + + data + 获奖经历 + + + data + 其他 + + + diff --git a/DownSheet/DownSheet/send_cycle.plist b/DownSheet/DownSheet/send_cycle.plist new file mode 100644 index 0000000..75adc41 --- /dev/null +++ b/DownSheet/DownSheet/send_cycle.plist @@ -0,0 +1,14 @@ + + + + + + data + 3天 + + + data + 7天 + + + diff --git a/DownSheet/DownSheet/time_window.h b/DownSheet/DownSheet/time_window.h new file mode 100644 index 0000000..893c9f5 --- /dev/null +++ b/DownSheet/DownSheet/time_window.h @@ -0,0 +1,39 @@ +// +// time_window.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import + +@interface time_window : UIView{ + /** + * 标题 + */ + UILabel *title; + /** + * 总容器 + */ + UIView *main; + /** + * 时间容器 + */ + UIDatePicker *datepicker; + /** + * 确定按钮 + */ + UIButton *btn; + /** + 取消按钮 + */ + UIButton *cancel; + /** + label(边框) + */ + UILabel *label; +} +-(id)initWithlist:(NSString*)kind; +- (void)showInView:(UIViewController *)Sview; +@end diff --git a/DownSheet/DownSheet/time_window.m b/DownSheet/DownSheet/time_window.m new file mode 100644 index 0000000..9583ef1 --- /dev/null +++ b/DownSheet/DownSheet/time_window.m @@ -0,0 +1,182 @@ + +// time_window.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "time_window.h" +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + + +@implementation time_window + +/** + * 初始化方法 + * + * @param frame <#frame description#> + * + * @return <#return value description#> + */ +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} +/** + * 程序调用入口 + * + * @param list <#list description#> + * @param height <#height description#> + * + * @return <#return value description#> + */ +-(id)initWithlist:(NSString*)kind{ + + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:kind]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + + /** + 选择时间的timepicker + + :returns: <#return value description#> + */ + datepicker=[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; + datepicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]; + /** + * 年月日显示 + */ + datepicker.datePickerMode = UIDatePickerModeDate; + /** + * 上午/下午 小时显示 + */ + //datepicker.datePickerMode = UIDatePickerModeTime; + datepicker.backgroundColor=[UIColor whiteColor]; + NSDate *defaulDate=[NSDate dateWithTimeIntervalSinceNow:9000000]; + [datepicker setDate:defaulDate]; + datepicker.frame=CGRectMake(0, ScreenHeight, ScreenWidth, (ScreenHeight/3)-25); + + + label = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 1)]; + [label setBackgroundColor:[UIColor grayColor]]; + + btn = [[UIButton alloc] initWithFrame:CGRectMake((ScreenWidth/2)+0.5, ScreenHeight, (ScreenWidth/2)-0.5, 24)]; + [btn setTitle:@"完成" forState:UIControlStateNormal]; + [btn.titleLabel setFont:[UIFont systemFontOfSize:12]]; + [btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; + [btn setBackgroundColor:[UIColor whiteColor]]; + [btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; + + cancel = [[UIButton alloc] initWithFrame:CGRectMake(0, ScreenHeight, (ScreenWidth/2)-0.5, 24)]; + [cancel setTitle:@"取消" forState:UIControlStateNormal]; + [cancel.titleLabel setFont:[UIFont systemFontOfSize:12]]; + [cancel setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; + [cancel setBackgroundColor:[UIColor whiteColor]]; + [cancel addTarget:self action:@selector(cancelClicked:) forControlEvents:UIControlEventTouchUpInside]; + + [self addSubview:label]; + [self addSubview:datepicker]; + [self addSubview:btn]; + [self addSubview:cancel]; + [self addSubview:title]; + + [self animeData]; + } + return self; +} +-(IBAction)buttonClicked:(id)sender + +{ + NSDate *selected = [datepicker date]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + /** + * 年月日输出 + */ + [dateFormatter setDateFormat:@"yyyy-MM-dd"]; + /** + * 小时/分钟 + */ + //[dateFormatter setDateFormat:@"HH:mm"]; + NSString *destDateString = [dateFormatter stringFromDate:selected]; + + NSLog(@"%@",destDateString); + [self tappedCancel]; +} +-(IBAction)cancelClicked:(id)sender + +{ + [self tappedCancel]; +} + +/** + * 弹出动画 + */ +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(datepicker.frame.size.height), title.frame.size.width, title.frame.size.height)]; + [datepicker setFrame:CGRectMake(datepicker.frame.origin.x, (ScreenHeight-datepicker.frame.size.height)-25, datepicker.frame.size.width, datepicker.frame.size.height)]; + [btn setFrame:CGRectMake(btn.frame.origin.x, ScreenHeight-btn.frame.size.height, btn.frame.size.width, btn.frame.size.height)]; + [cancel setFrame:CGRectMake(cancel.frame.origin.x, ScreenHeight-cancel.frame.size.height, cancel.frame.size.width, cancel.frame.size.height)]; + [label setFrame:CGRectMake(label.frame.origin.x, ScreenHeight-label.frame.size.height, label.frame.size.width, label.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + [label setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [cancel setFrame:CGRectMake(0, ScreenHeight, cancel.frame.size.width, 0)]; + [btn setFrame:CGRectMake(0, ScreenHeight, btn.frame.size.width, 0)]; + [datepicker setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + +@end diff --git a/DownSheet/DownSheet/work_cell.h b/DownSheet/DownSheet/work_cell.h new file mode 100644 index 0000000..ac4b9e6 --- /dev/null +++ b/DownSheet/DownSheet/work_cell.h @@ -0,0 +1,26 @@ +// +// work_cell.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface work_cell : UITableViewCell +{ + UIView *backgroundView; +} + +@property (strong, nonatomic) UILabel *InfoLabel; + +-(void)setcell:(CGFloat)x; + +@end diff --git a/DownSheet/DownSheet/work_cell.m b/DownSheet/DownSheet/work_cell.m new file mode 100644 index 0000000..9994d69 --- /dev/null +++ b/DownSheet/DownSheet/work_cell.m @@ -0,0 +1,54 @@ +// +// work_cell.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "work_cell.h" + +@implementation work_cell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + + _InfoLabel = [[UILabel alloc]init]; + _InfoLabel.backgroundColor = [UIColor clearColor]; + _InfoLabel.font = [UIFont systemFontOfSize:12]; + [_InfoLabel setTextColor:[UIColor colorWithRed:153.0/255 green:153.0/255 blue:153.0/255 alpha:1.0f]]; + [self.contentView addSubview:_InfoLabel]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + } + return self; +} + +-(void)setcell:(CGFloat)x{ + _InfoLabel.frame = CGRectMake(x, 0, 140, 40); +} + +-(void)layoutSubviews{ + [super layoutSubviews]; + + _InfoLabel.frame = CGRectMake(15, 0, 140, 45); +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + if(selected){ + _InfoLabel.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; + }else{ + self.backgroundColor = [UIColor whiteColor]; + + _InfoLabel.textColor = [UIColor blackColor]; + } +} + + +@end diff --git a/DownSheet/DownSheet/work_days.plist b/DownSheet/DownSheet/work_days.plist new file mode 100644 index 0000000..c19220b --- /dev/null +++ b/DownSheet/DownSheet/work_days.plist @@ -0,0 +1,22 @@ + + + + + + data + 2天 + + + data + 3天 + + + data + 4天 + + + data + 5天 + + + diff --git a/DownSheet/DownSheet/work_time.plist b/DownSheet/DownSheet/work_time.plist new file mode 100644 index 0000000..f4924af --- /dev/null +++ b/DownSheet/DownSheet/work_time.plist @@ -0,0 +1,22 @@ + + + + + + data + 1个月 + + + data + 2个月 + + + data + 3个月 + + + data + 3个月以上 + + + diff --git a/DownSheet/DownSheet/workday.h b/DownSheet/DownSheet/workday.h new file mode 100644 index 0000000..7c8e477 --- /dev/null +++ b/DownSheet/DownSheet/workday.h @@ -0,0 +1,31 @@ +// +// workday.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#import "Work_Day.h" +#import "Receive_email.h" +@interface workday : UIViewController{ + NSArray *MenuList; + NSArray *MenuList1; + NSArray *MenuList2; + NSArray *MenuList3; + NSArray *Menulist4; + NSArray *MenuList5; + +} + +@property (strong, nonatomic) NSString *kind1; +@property (strong, nonatomic) NSString *kind2; +@property (strong, nonatomic) NSString *kind3; +@property (strong, nonatomic) NSString *kind4; +@property (strong, nonatomic) NSString *kind5; +@property (strong, nonatomic) NSString *kind6; + +@property (strong, nonatomic) NSString *kind7; + +@end diff --git a/DownSheet/DownSheet/workday.m b/DownSheet/DownSheet/workday.m new file mode 100644 index 0000000..f51f06d --- /dev/null +++ b/DownSheet/DownSheet/workday.m @@ -0,0 +1,133 @@ +// +// workday.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "workday.h" +#import "time_window.h" +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface workday () + +@property (strong, nonatomic) UIButton *button; + +@end + +@implementation workday + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self initDemoData]; + + + + _button = [[UIButton alloc]initWithFrame:CGRectMake(50, 50, 210, 100)]; + [_button setTitle:@"弹出菜单演示" forState:UIControlStateNormal]; + [_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [_button addTarget:self action:@selector(clickMenu) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_button]; + +} +-(void)initDemoData{ + + MenuList = [[NSArray alloc]init]; + /** + * 绑定本地数据(每周实习天数) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"work_days.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath]; + _kind1 = @" 每周实习天数"; + /** + * 绑定本地数据(日薪) + */ + // 读取本地资源文件保存数组 + NSString *fullpath1=[[NSBundle mainBundle]pathForResource:@"salary_range.plist" ofType:nil]; + MenuList1 = [NSArray arrayWithContentsOfFile:fullpath1]; + _kind2 =@" 日薪范围"; + /** + * 绑定本地数据(最低学历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath3=[[NSBundle mainBundle]pathForResource:@"lowest_study.plist" ofType:nil]; + MenuList2 = [NSArray arrayWithContentsOfFile:fullpath3]; + _kind3 =@" 最低学历"; + /** + * 绑定本地数据(发送周期) + */ + // 读取本地资源文件保存数组 + NSString *fullpath4=[[NSBundle mainBundle]pathForResource:@"send_cycle.plist" ofType:nil]; + MenuList3 = [NSArray arrayWithContentsOfFile:fullpath4]; + _kind4 =@" 发送周期"; + /** + * 绑定本地数据(可实习时间) + */ + // 读取本地资源文件保存数组 + NSString *fullpath5 =[[NSBundle mainBundle]pathForResource:@"work_time.plist" ofType:nil]; + Menulist4 = [NSArray arrayWithContentsOfFile:fullpath5]; + _kind5 =@" 可实习时间"; + /** + * 绑定本地数据(校园经历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath6 =[[NSBundle mainBundle]pathForResource:@"school_exp.plist" ofType:nil]; + MenuList5 = [NSArray arrayWithContentsOfFile:fullpath6]; + _kind6 =@" 可实习时间"; + +} + +-(void)clickMenu{ + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:ScreenHeight/3 kind:_kind1]; + sheet.delegate = self; + [sheet showInView:nil]; + /** + email在使用的时候会出现挡住屏幕 + */ +// Receive_email *sheet = [[Receive_email alloc]initWithlist:ScreenHeight/5 kind:_kind4]; +// [sheet showInView:nil]; +// _kind7 = @" 出生日期"; +// time_window *sheet = [[time_window alloc] initWithlist:_kind7]; +// [sheet showInView:nil]; + +} + +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + + + NSLog(@"dasdjhasdh"); + [_button setTitle:text forState:UIControlStateNormal]; + +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/DownSheet/DownSheetTests/DownSheetTests-Info.plist b/DownSheet/DownSheetTests/DownSheetTests-Info.plist new file mode 100644 index 0000000..72c8a9d --- /dev/null +++ b/DownSheet/DownSheetTests/DownSheetTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.test.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/DownSheet/DownSheetTests/DownSheetTests.m b/DownSheet/DownSheetTests/DownSheetTests.m new file mode 100644 index 0000000..7d2ef69 --- /dev/null +++ b/DownSheet/DownSheetTests/DownSheetTests.m @@ -0,0 +1,38 @@ +// +// DownSheetTests.m +// DownSheetTests +// +// Created by wolf on 14-11-30. +// Copyright (c) 2014年 wolf. All rights reserved. +// + +#import + +@interface DownSheetTests : XCTestCase + +@end + +@implementation DownSheetTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown +{ + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample +{ + XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/DownSheet/DownSheetTests/en.lproj/InfoPlist.strings b/DownSheet/DownSheetTests/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/DownSheet/DownSheetTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/EAIntroPage.h b/EAIntroPage.h new file mode 100755 index 0000000..0d5399d --- /dev/null +++ b/EAIntroPage.h @@ -0,0 +1,32 @@ +// +// EAIntroPage.h +// EAIntroView +// +// Copyright (c) 2013 Evgeny Aleksandrov. +// +#import +#import + +@interface EAIntroPage : NSObject + +// title image Y position - from top of the screen +// title and description labels Y position - from bottom of the screen +@property (strong, nonatomic) UIImage *bgImage; +@property (nonatomic, retain) UIImage *titleImage; +@property (nonatomic, assign) CGFloat imgPositionY; +@property (nonatomic, retain) NSString *title; +@property (nonatomic, retain) UIFont *titleFont; +@property (nonatomic, retain) UIColor *titleColor; +@property (nonatomic, assign) CGFloat titlePositionY; +@property (nonatomic, retain) NSString *desc; +@property (nonatomic, retain) UIFont *descFont; +@property (nonatomic, retain) UIColor *descColor; +@property (nonatomic, assign) CGFloat descPositionY; + +// if customView is set - all other properties are ignored +@property (nonatomic, retain) UIView *customView; + ++ (EAIntroPage *)page; ++ (EAIntroPage *)pageWithCustomView:(UIView *)customV; + +@end diff --git a/EAIntroPage.m b/EAIntroPage.m new file mode 100755 index 0000000..bd6be04 --- /dev/null +++ b/EAIntroPage.m @@ -0,0 +1,34 @@ +// +// EAIntroPage.m +// EAIntroView +// +// Copyright (c) 2013 Evgeny Aleksandrov. +// + +#import "EAIntroPage.h" + +@implementation EAIntroPage + ++ (EAIntroPage *)page { + EAIntroPage *newPage = [[EAIntroPage alloc] init]; + newPage.imgPositionY = 50.0f; + newPage.titlePositionY = 160.0f; + newPage.descPositionY = 140.0f; + newPage.title = @""; + newPage.titleFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]; + newPage.titleColor = [UIColor whiteColor]; + newPage.desc = @""; + newPage.descFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:13.0]; + newPage.descColor = [UIColor whiteColor]; + + return newPage; +} + ++ (EAIntroPage *)pageWithCustomView:(UIView *)customV { + EAIntroPage *newPage = [[EAIntroPage alloc] init]; + newPage.customView = customV; + + return newPage; +} + +@end diff --git a/EAIntroView.h b/EAIntroView.h new file mode 100755 index 0000000..c2f2a1a --- /dev/null +++ b/EAIntroView.h @@ -0,0 +1,43 @@ +// +// EAIntroView.h +// EAIntroView +// +// Copyright (c) 2013 Evgeny Aleksandrov. +// + +#import +#import "EAIntroPage.h" + +@protocol EAIntroDelegate +@optional +- (void)introDidFinish; +@end + +@interface EAIntroView : UIView + +@property (nonatomic, assign) id delegate; + +// titleView Y position - from top of the screen +// pageControl Y position - from bottom of the screen +@property (nonatomic, assign) bool swipeToExit; +@property (nonatomic, assign) bool hideOffscreenPages; +@property (nonatomic, retain) UIImage *bgImage; +@property (nonatomic, retain) UIView *titleView; +@property (nonatomic, assign) CGFloat titleViewY; +@property (nonatomic, retain) UIPageControl *pageControl; +@property (nonatomic, assign) CGFloat pageControlY; +@property (nonatomic, retain) UIButton *skipButton; + +@property (nonatomic, assign) NSInteger currentPageIndex; +@property (nonatomic, retain) UIScrollView *scrollView; +@property (nonatomic, retain) UIImageView *bgImageView; +@property (nonatomic, retain) UIImageView *pageBgBack; +@property (nonatomic, retain) UIImageView *pageBgFront; +@property (nonatomic, retain) NSArray *pages; + +- (id)initWithFrame:(CGRect)frame andPages:(NSArray *)pagesArray; + +- (void)showInView:(UIView *)view animateDuration:(CGFloat)duration; +- (void)hideWithFadeOutDuration:(CGFloat)duration; + +@end diff --git a/EAIntroView.m b/EAIntroView.m new file mode 100755 index 0000000..cae2157 --- /dev/null +++ b/EAIntroView.m @@ -0,0 +1,394 @@ +// +// EAIntroView.m +// EAIntroView +// +// Copyright (c) 2013 Evgeny Aleksandrov. +// + +#import "EAIntroView.h" + +#define DEFAULT_BACKGROUND_COLOR [UIColor blackColor] + +@interface EAIntroView() { + NSMutableArray *pageViews; + NSInteger LastPageIndex; +} + +@end + +@implementation EAIntroView + +#pragma mark - Init + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + pageViews = [[NSMutableArray alloc] init]; + self.swipeToExit = YES; + self.hideOffscreenPages = YES; + self.titleViewY = 20.0f; + self.pageControlY = 60.0f; + [self buildUIWithFrame:frame]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + pageViews = [[NSMutableArray alloc] init]; + self.swipeToExit = YES; + self.hideOffscreenPages = YES; + self.titleViewY = 20.0f; + self.pageControlY = 60.0f; + [self buildUIWithFrame:self.frame]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame andPages:(NSArray *)pagesArray { + self = [super initWithFrame:frame]; + if (self) { + pageViews = [[NSMutableArray alloc] init]; + self.swipeToExit = YES; + self.hideOffscreenPages = YES; + self.titleViewY = 20.0f; + self.pageControlY = 60.0f; + _pages = [pagesArray copy]; + [self buildUIWithFrame:frame]; + [self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; + } + return self; +} + +#pragma mark - UI building + +- (void)buildUIWithFrame:(CGRect)frame { + self.backgroundColor = DEFAULT_BACKGROUND_COLOR; + + [self buildBackgroundImage]; + [self buildScrollViewWithFrame:frame]; + + [self buildFooterView]; + + [self.bgImageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; + [self.pageControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; + [self.skipButton setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; +} + +- (void)buildBackgroundImage { + self.bgImageView = [[UIImageView alloc] initWithFrame:self.frame]; + self.bgImageView.backgroundColor = [UIColor clearColor]; + self.bgImageView.contentMode = UIViewContentModeScaleToFill; + self.bgImageView.autoresizesSubviews = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.bgImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [self addSubview:self.bgImageView]; + + self.pageBgBack = [[UIImageView alloc] initWithFrame:self.frame]; + self.pageBgBack.backgroundColor = [UIColor clearColor]; + self.pageBgBack.contentMode = UIViewContentModeScaleToFill; + self.pageBgBack.autoresizesSubviews = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.pageBgBack.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.pageBgBack.alpha = 0; + [self addSubview:self.pageBgBack]; + + self.pageBgFront = [[UIImageView alloc] initWithFrame:self.frame]; + self.pageBgFront.backgroundColor = [UIColor clearColor]; + self.pageBgFront.contentMode = UIViewContentModeScaleToFill; + self.pageBgFront.autoresizesSubviews = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.pageBgFront.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.pageBgFront.alpha = 0; + [self addSubview:self.pageBgFront]; +} + +- (void)buildScrollViewWithFrame:(CGRect)frame { + + self.scrollView = [[UIScrollView alloc] initWithFrame:self.frame]; + + self.scrollView.pagingEnabled = YES; + self.scrollView.showsHorizontalScrollIndicator = NO; + self.scrollView.showsVerticalScrollIndicator = NO; + self.scrollView.delegate = self; + + self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + + //A running x-coordinate. This grows for every page + CGFloat contentXIndex = 0; + for (int idx = 0; idx < _pages.count; idx++) { + [pageViews addObject:[self viewForPage:_pages[idx] atXIndex:&contentXIndex]]; + [self.scrollView addSubview:pageViews[idx]]; + } + + [self makePanelVisibleAtIndex:0]; + + if (self.swipeToExit) { + [self appendCloseViewAtXIndex:&contentXIndex]; + } + + self.scrollView.contentSize = CGSizeMake(contentXIndex, self.scrollView.frame.size.height); + [self addSubview:self.scrollView]; + + [self.pageBgBack setAlpha:0]; + [self.pageBgBack setImage:[self bgForPage:1]]; + [self.pageBgFront setAlpha:1]; + [self.pageBgFront setImage:[self bgForPage:0]]; +} + +- (UIView *)viewForPage:(EAIntroPage *)page atXIndex:(CGFloat *)xIndex { + + UIView *pageView = [[UIView alloc] initWithFrame:CGRectMake(*xIndex, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height)]; + + *xIndex += self.scrollView.frame.size.width; + + if(page.customView) { + [pageView addSubview:page.customView]; + return pageView; + } + + if(page.titleImage) { + UIImageView *titleImageView = [[UIImageView alloc] initWithImage:page.titleImage]; + CGRect rect1 = titleImageView.frame; + rect1.origin.x = (self.scrollView.frame.size.width - rect1.size.width)/2; + rect1.origin.y = page.imgPositionY; + [titleImageView setFrame:rect1]; + [pageView addSubview:titleImageView]; + } + + if([page.title length]) { + CGFloat titleHeight; + + if ([page.title respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { + NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:page.title attributes:@{ NSFontAttributeName: page.titleFont }]; + CGRect rect = [attributedText boundingRectWithSize:(CGSize){self.scrollView.frame.size.width - 20, CGFLOAT_MAX} options:NSStringDrawingUsesLineFragmentOrigin context:nil]; + titleHeight = ceilf(rect.size.height); + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + titleHeight = [page.title sizeWithFont:page.titleFont constrainedToSize:CGSizeMake(self.scrollView.frame.size.width - 20, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height; +#pragma clang diagnostic pop + } + + CGRect titleLabelFrame = CGRectMake(10, self.frame.size.height - page.titlePositionY, self.scrollView.frame.size.width - 20, titleHeight); + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:titleLabelFrame]; + titleLabel.text = page.title; + titleLabel.font = page.titleFont; + titleLabel.textColor = page.titleColor; + titleLabel.backgroundColor = [UIColor clearColor]; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.lineBreakMode = NSLineBreakByWordWrapping; + [pageView addSubview:titleLabel]; + } + + if([page.desc length]) { + CGRect descLabelFrame = CGRectMake(0, self.frame.size.height - page.descPositionY, self.scrollView.frame.size.width, 500); + + UITextView *descLabel = [[UITextView alloc] initWithFrame:descLabelFrame]; + descLabel.text = page.desc; + descLabel.scrollEnabled = NO; + descLabel.font = page.descFont; + descLabel.textColor = page.descColor; + descLabel.backgroundColor = [UIColor clearColor]; + descLabel.textAlignment = NSTextAlignmentCenter; + descLabel.userInteractionEnabled = NO; + //[descLabel sizeToFit]; + [pageView addSubview:descLabel]; + } + + return pageView; +} + +- (void)appendCloseViewAtXIndex:(CGFloat*)xIndex { + UIView *closeView = [[UIView alloc] initWithFrame:CGRectMake(*xIndex, 0, self.frame.size.width, self.frame.size.height)]; + closeView.tag = 124; + [self.scrollView addSubview:closeView]; + + *xIndex += self.scrollView.frame.size.width; +} + +- (void)removeCloseViewAtXIndex:(CGFloat*)xIndex { + UIView *closeView = [self.scrollView viewWithTag:124]; + if(closeView) { + [closeView removeFromSuperview]; + } + + *xIndex -= self.scrollView.frame.size.width; +} + +- (void)buildFooterView { + self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - self.pageControlY, self.frame.size.width, 20)]; + [self.pageControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; + [self.pageControl addTarget:self action:@selector(showPanelAtPageControl) forControlEvents:UIControlEventValueChanged]; + self.pageControl.numberOfPages = _pages.count; + [self addSubview:self.pageControl]; + + self.skipButton = [[UIButton alloc] initWithFrame:CGRectMake(self.scrollView.frame.size.width - 80, self.pageControl.frame.origin.y, 80, self.pageControl.frame.size.height)]; + + [self.skipButton setAutoresizingMask: UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin]; + [self.skipButton setTitle:NSLocalizedString(@"Skip", nil) forState:UIControlStateNormal]; + [self.skipButton addTarget:self action:@selector(skipIntroduction) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:self.skipButton]; +} + +#pragma mark - UIScrollView Delegate + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { + self.currentPageIndex = scrollView.contentOffset.x/self.scrollView.frame.size.width; + + if (self.currentPageIndex == (pageViews.count)) { + if ([(id)self.delegate respondsToSelector:@selector(introDidFinish)]) { + [self.delegate introDidFinish]; + } + } else { + LastPageIndex = self.pageControl.currentPage; + self.pageControl.currentPage = self.currentPageIndex; + + [self makePanelVisibleAtIndex:(NSInteger)self.currentPageIndex]; + } +} + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + float offset = scrollView.contentOffset.x / self.scrollView.frame.size.width; + NSInteger page = (int)(offset); + + if (page == (pageViews.count - 1) && self.swipeToExit) { + self.alpha = ((self.scrollView.frame.size.width*pageViews.count)-self.scrollView.contentOffset.x)/self.scrollView.frame.size.width; + } else { + [self crossDissolveForOffset:offset]; + } +} + +- (void)crossDissolveForOffset:(float)offset { + int page = (int)(offset); + float alphaValue = offset - (int)offset; + + if (alphaValue < 0 && self.currentPageIndex == 0){ + [self.pageBgBack setImage:nil]; + [self.pageBgFront setAlpha:(1 + alphaValue)]; + return; + } + + [self.pageBgFront setAlpha:1]; + [self.pageBgFront setImage:[self bgForPage:page]]; + [self.pageBgBack setAlpha:0]; + [self.pageBgBack setImage:[self bgForPage:page+1]]; + + float backLayerAlpha = alphaValue; + float frontLayerAlpha = (1 - alphaValue); + + [self.pageBgBack setAlpha:backLayerAlpha]; + [self.pageBgFront setAlpha:frontLayerAlpha]; +} + +- (UIImage *)bgForPage:(int)idx { + if(idx >= _pages.count || idx < 0) + return nil; + + return ((EAIntroPage *)_pages[idx]).bgImage; +} + +#pragma mark - Custom setters + +- (void)setPages:(NSArray *)pages { + _pages = [pages copy]; + [self.scrollView removeFromSuperview]; + self.scrollView = nil; + [self buildScrollViewWithFrame:self.frame]; +} + +- (void)setBgImage:(UIImage *)bgImage { + _bgImage = bgImage; + [self.bgImageView setImage:_bgImage]; +} + +- (void)setSwipeToExit:(bool)swipeToExit { + if (swipeToExit != _swipeToExit) { + CGFloat contentXIndex = self.scrollView.contentSize.width; + if(swipeToExit) { + [self appendCloseViewAtXIndex:&contentXIndex]; + } else { + [self removeCloseViewAtXIndex:&contentXIndex]; + } + self.scrollView.contentSize = CGSizeMake(contentXIndex, self.scrollView.frame.size.height); + } + _swipeToExit = swipeToExit; + +} + +- (void)setTitleView:(UIView *)titleView { + [_titleView removeFromSuperview]; + _titleView = titleView; + [_titleView setFrame:CGRectMake((self.frame.size.width-_titleView.frame.size.width)/2, self.titleViewY, _titleView.frame.size.width, _titleView.frame.size.height)]; + [self addSubview:_titleView]; +} + +- (void)setTitleViewY:(CGFloat)titleViewY { + _titleViewY = titleViewY; + [_titleView setFrame:CGRectMake((self.frame.size.width-_titleView.frame.size.width)/2, self.titleViewY, _titleView.frame.size.width, _titleView.frame.size.height)]; +} + +- (void)setPageControlY:(CGFloat)pageControlY { + _pageControlY = pageControlY; + [self.pageControl setFrame:CGRectMake(0, self.frame.size.height - pageControlY, self.frame.size.width, 20)]; +} + +- (void)setSkipButton:(UIButton *)skipButton { + [_skipButton removeFromSuperview]; + _skipButton = skipButton; + [_skipButton addTarget:self action:@selector(skipIntroduction) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:_skipButton]; +} + +#pragma mark - Actions + +- (void)makePanelVisibleAtIndex:(NSInteger)panelIndex{ + [UIView animateWithDuration:0.3 animations:^{ + for (int idx = 0; idx < pageViews.count; idx++) { + if (idx == panelIndex) { + [pageViews[idx] setAlpha:1]; + } + else { + if(!self.hideOffscreenPages) { + [pageViews[idx] setAlpha:0]; + } + } + } + }]; +} + +- (void)showPanelAtPageControl { + LastPageIndex = self.pageControl.currentPage; + self.currentPageIndex = self.pageControl.currentPage; + + [self makePanelVisibleAtIndex:(NSInteger)self.currentPageIndex]; + + [self.scrollView setContentOffset:CGPointMake(self.currentPageIndex * 320, 0) animated:YES]; +} + +- (void)skipIntroduction { + if ([(id)self.delegate respondsToSelector:@selector(introDidFinish)]) { + [self.delegate introDidFinish]; + } + + [self hideWithFadeOutDuration:0.3]; +} + +- (void)hideWithFadeOutDuration:(CGFloat)duration { + [UIView animateWithDuration:duration animations:^{ + self.alpha = 0; + } completion:nil]; +} + +- (void)showInView:(UIView *)view animateDuration:(CGFloat)duration { + self.alpha = 0; + [self.scrollView setContentOffset:CGPointZero]; + [view addSubview:self]; + + [UIView animateWithDuration:duration animations:^{ + self.alpha = 1; + }]; +} + +@end diff --git a/GHIJ_city.plist b/GHIJ_city.plist new file mode 100644 index 0000000..d90f536 --- /dev/null +++ b/GHIJ_city.plist @@ -0,0 +1,38 @@ + + + + + + hot_city + 广州 + + + hot_city + 杭州 + + + hot_city + 海口 + + + hot_city + 海外 + + + hot_city + 济南 + + + hot_city + 贵阳 + + + hot_city + 哈尔滨 + + + hot_city + 合肥 + + + diff --git a/KLMN_city.plist b/KLMN_city.plist new file mode 100644 index 0000000..b5f3819 --- /dev/null +++ b/KLMN_city.plist @@ -0,0 +1,30 @@ + + + + + + hot_city + 南京 + + + hot_city + 兰州 + + + hot_city + 宁波 + + + hot_city + 昆明 + + + hot_city + 南宁 + + + hot_city + 南昌 + + + diff --git a/NSData+SDDataCache.h b/NSData+SDDataCache.h new file mode 100755 index 0000000..c5f95ba --- /dev/null +++ b/NSData+SDDataCache.h @@ -0,0 +1,17 @@ +// +// NSData+SDDataCache.h +// SDCycleScrollView +// +// Created by aier on 15-3-30. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import + + +@interface NSData (SDDataCache) + +- (void)saveDataCacheWithIdentifier:(NSString *)identifier; ++ (NSData *)getDataCacheWithIdentifier:(NSString *)identifier; + +@end diff --git a/NSData+SDDataCache.m b/NSData+SDDataCache.m new file mode 100755 index 0000000..4358167 --- /dev/null +++ b/NSData+SDDataCache.m @@ -0,0 +1,69 @@ +// +// NSData+SDDataCache.m +// SDCycleScrollView +// +// Created by aier on 15-3-30. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import "NSData+SDDataCache.h" +#import + +#define kSDMaxCacheFileAmount 100 + +@implementation NSData (SDDataCache) + ++ (NSString *)cachePath +{ + NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; + path = [path stringByAppendingPathComponent:@"Caches"]; + path = [path stringByAppendingPathComponent:@"SDDataCache"]; + if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { + [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil]; + } + return path; +} + ++ (NSString *)creatMD5StringWithString:(NSString *)string +{ + const char *original_str = [string UTF8String]; + unsigned char result[CC_MD5_DIGEST_LENGTH]; + CC_MD5(original_str, (CC_LONG)strlen(original_str), result); + NSMutableString *hash = [NSMutableString string]; + for (int i = 0; i < 16; i++) + [hash appendFormat:@"%02X", result[i]]; + [hash lowercaseString]; + return hash; +} + ++ (NSString *)creatDataPathWithString:(NSString *)string +{ + NSString *path = [NSData cachePath]; + path = [path stringByAppendingPathComponent:[self creatMD5StringWithString:string]]; + return path; +} + +- (void)saveDataCacheWithIdentifier:(NSString *)identifier +{ + NSString *path = [NSData creatDataPathWithString:identifier]; + [self writeToFile:path atomically:YES]; +} + ++ (NSData *)getDataCacheWithIdentifier:(NSString *)identifier +{ + static BOOL isCheckedCacheDisk = NO; + if (!isCheckedCacheDisk) { + NSFileManager *manager = [NSFileManager defaultManager]; + NSArray *contents = [manager contentsOfDirectoryAtPath:[self cachePath] error:nil]; + if (contents.count >= kSDMaxCacheFileAmount) { + NSLog(@"%@", [self cachePath]); + [manager removeItemAtPath:[self cachePath] error:nil]; + } + isCheckedCacheDisk = YES; + } + NSString *path = [self creatDataPathWithString:identifier]; + NSData *data = [NSData dataWithContentsOfFile:path]; + return data; +} + +@end diff --git a/OPQR_city.plist b/OPQR_city.plist new file mode 100644 index 0000000..ec6ddd7 --- /dev/null +++ b/OPQR_city.plist @@ -0,0 +1,14 @@ + + + + + + hot_city + 澳门 + + + hot_city + 青岛 + + + diff --git a/PlayListCell.h b/PlayListCell.h new file mode 100755 index 0000000..dbe7171 --- /dev/null +++ b/PlayListCell.h @@ -0,0 +1,16 @@ +// +// PlayListCell.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface PlayListCell : UITableViewCell + +@property (nonatomic, strong) IBOutlet UIImageView *artWorkImageView; +@property (nonatomic, strong) IBOutlet UILabel *playListNameLabel; + +@end diff --git a/PlayListCell.m b/PlayListCell.m new file mode 100755 index 0000000..d21a934 --- /dev/null +++ b/PlayListCell.m @@ -0,0 +1,23 @@ +// +// PlayListCell.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "PlayListCell.h" + +@implementation PlayListCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/PlayListCell.xib b/PlayListCell.xib new file mode 100755 index 0000000..daa0b4c --- /dev/null +++ b/PlayListCell.xib @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PlayListTableViewController.h b/PlayListTableViewController.h new file mode 100755 index 0000000..85d8972 --- /dev/null +++ b/PlayListTableViewController.h @@ -0,0 +1,13 @@ +// +// PlayListTableViewController.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface PlayListTableViewController : UITableViewController + +@end diff --git a/PlayListTableViewController.m b/PlayListTableViewController.m new file mode 100755 index 0000000..7eb6d6f --- /dev/null +++ b/PlayListTableViewController.m @@ -0,0 +1,81 @@ +// +// PlayListTableViewController.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "PlayListTableViewController.h" +#import "PlayListCell.h" +#import "DetailViewController.h" +#import "CompanyPosition.h" + +@interface PlayListTableViewController () + +@property (nonatomic, strong) NSMutableArray *playListArray; + +@end + +@implementation PlayListTableViewController + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + NSLog(@"PlayListTableViewController viewWillAppear"); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + _playListArray = [@[@"test1", + @"test2", + @"test3", + @"test4", + @"test5", + @"test6"] mutableCopy]; + [self.tableView registerNib:[UINib nibWithNibName:@"PlayListCell" bundle:nil] forCellReuseIdentifier:@"PlayListCell"]; + NSLog(@"asdasdjasdkalsd"); +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return _playListArray.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"PlayListCell"; + PlayListCell *cell = (PlayListCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + + cell.artWorkImageView.image = [UIImage imageNamed:_playListArray[indexPath.row]]; + cell.playListNameLabel.text = [NSString stringWithFormat:@"经验谈的内容 %ld",(long)indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; +// DetailViewController *detailVC = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil]; +// CompanyPosition *detailVC = [[CompanyPosition alloc] initWithNibName:@"ComPosition" bundle:nil]; +// [self.navigationController pushViewController:detailVC animated:YES]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; + [self.navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"company"] animated:YES]; + //self.view.window.rootViewController=[storyboard instantiateInitialViewController]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +@end diff --git a/PlayListTableViewController.xib b/PlayListTableViewController.xib new file mode 100755 index 0000000..75edd7b --- /dev/null +++ b/PlayListTableViewController.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6bb0f8 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +please look diff --git a/SDCollectionViewCell.h b/SDCollectionViewCell.h new file mode 100755 index 0000000..41f801b --- /dev/null +++ b/SDCollectionViewCell.h @@ -0,0 +1,37 @@ +// +// SDCollectionViewCell.h +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/** + + ******************************************************* + * * + * 感谢您的支持, 如果下载的代码在使用过程中出现BUG或者其他问题 * + * 您可以发邮件到gsdios@126.com 或者 到 * + * https://github.com/gsdios?tab=repositories 提交问题 * + * * + ******************************************************* + + */ + + + +#import + +@interface SDCollectionViewCell : UICollectionViewCell + +@property (weak, nonatomic) UIImageView *imageView; +@property (copy, nonatomic) NSString *title; + +@property (nonatomic, strong) UIColor *titleLabelTextColor; +@property (nonatomic, strong) UIFont *titleLabelTextFont; +@property (nonatomic, strong) UIColor *titleLabelBackgroundColor; +@property (nonatomic, assign) CGFloat titleLabelHeight; + +@property (nonatomic, assign) BOOL hasConfigured; + +@end diff --git a/SDCollectionViewCell.m b/SDCollectionViewCell.m new file mode 100755 index 0000000..1ff3071 --- /dev/null +++ b/SDCollectionViewCell.m @@ -0,0 +1,96 @@ +// +// SDCollectionViewCell.m +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + + +/** + + ******************************************************* + * * + * 感谢您的支持, 如果下载的代码在使用过程中出现BUG或者其他问题 * + * 您可以发邮件到gsdios@126.com 或者 到 * + * https://github.com/gsdios?tab=repositories 提交问题 * + * * + ******************************************************* + + */ + + +#import "SDCollectionViewCell.h" +#import "UIView+SDExtension.h" + +@implementation SDCollectionViewCell +{ + __weak UILabel *_titleLabel; +} + + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self setupImageView]; + [self setupTitleLabel]; + } + + return self; +} + +- (void)setTitleLabelBackgroundColor:(UIColor *)titleLabelBackgroundColor +{ + _titleLabelBackgroundColor = titleLabelBackgroundColor; + _titleLabel.backgroundColor = titleLabelBackgroundColor; +} + +- (void)setTitleLabelTextColor:(UIColor *)titleLabelTextColor +{ + _titleLabelTextColor = titleLabelTextColor; + _titleLabel.textColor = titleLabelTextColor; +} + +- (void)setTitleLabelTextFont:(UIFont *)titleLabelTextFont +{ + _titleLabelTextFont = titleLabelTextFont; + _titleLabel.font = titleLabelTextFont; +} + +- (void)setupImageView +{ + UIImageView *imageView = [[UIImageView alloc] init]; + _imageView = imageView; + [self addSubview:imageView]; +} + +- (void)setupTitleLabel +{ + UILabel *titleLabel = [[UILabel alloc] init]; + _titleLabel = titleLabel; + _titleLabel.hidden = YES; + [self addSubview:titleLabel]; +} + +- (void)setTitle:(NSString *)title +{ + _title = [title copy]; + _titleLabel.text = [NSString stringWithFormat:@" %@", title]; +} + + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + _imageView.frame = self.bounds; + + CGFloat titleLabelW = self.sd_width; + CGFloat titleLabelH = _titleLabelHeight; + CGFloat titleLabelX = 0; + CGFloat titleLabelY = self.sd_height - titleLabelH; + _titleLabel.frame = CGRectMake(titleLabelX, titleLabelY, titleLabelW, titleLabelH); + _titleLabel.hidden = !_titleLabel.text; +} + +@end diff --git a/SDCycleScrollView.h b/SDCycleScrollView.h new file mode 100755 index 0000000..f0f81ea --- /dev/null +++ b/SDCycleScrollView.h @@ -0,0 +1,60 @@ +// +// SDCycleScrollView.h +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/** + + ******************************************************* + * * + * 感谢您的支持, 如果下载的代码在使用过程中出现BUG或者其他问题 * + * 您可以发邮件到gsdios@126.com 或者 到 * + * https://github.com/gsdios?tab=repositories 提交问题 * + * * + ******************************************************* + + */ + + +#import + +typedef enum { + SDCycleScrollViewPageContolAlimentRight, + SDCycleScrollViewPageContolAlimentCenter +} SDCycleScrollViewPageContolAliment; + +@class SDCycleScrollView; + +@protocol SDCycleScrollViewDelegate + +- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index; + +@end + +@interface SDCycleScrollView : UIView + +@property (nonatomic, strong) NSArray *localizationImagesGroup; // 本地图片数组 +@property (nonatomic, strong) NSArray *imageURLsGroup; +@property (nonatomic, strong) NSArray *titlesGroup; +@property (nonatomic, assign) CGFloat autoScrollTimeInterval; +@property (nonatomic, weak) id delegate; + +// 自定义样式 +@property (nonatomic, assign) SDCycleScrollViewPageContolAliment pageControlAliment; // 分页控件位置 +@property (nonatomic, assign) CGSize pageControlDotSize; // 分页控件小圆标大小 +@property (nonatomic, strong) UIColor *dotColor; // 分页控件小圆标颜色 +@property (nonatomic, strong) UIColor *titleLabelTextColor; +@property (nonatomic, strong) UIFont *titleLabelTextFont; +@property (nonatomic, strong) UIColor *titleLabelBackgroundColor; +@property (nonatomic, assign) CGFloat titleLabelHeight; + + + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imagesGroup:(NSArray *)imagesGroup; + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLsGroup:(NSArray *)imageURLsGroup; + +@end diff --git a/SDCycleScrollView.m b/SDCycleScrollView.m new file mode 100755 index 0000000..796771b --- /dev/null +++ b/SDCycleScrollView.m @@ -0,0 +1,331 @@ +// +// SDCycleScrollView.m +// SDCycleScrollView +// +// Created by aier on 15-3-22. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/** + + ******************************************************* + * * + * 感谢您的支持, 如果下载的代码在使用过程中出现BUG或者其他问题 * + * 您可以发邮件到gsdios@126.com 或者 到 * + * https://github.com/gsdios?tab=repositories 提交问题 * + * * + ******************************************************* + + */ + + +#import "SDCycleScrollView.h" +#import "SDCollectionViewCell.h" +#import "UIView+SDExtension.h" +#import "TAPageControl.h" +#import "NSData+SDDataCache.h" + + + +NSString * const ID = @"cycleCell"; + +@interface SDCycleScrollView () + + +@property (nonatomic, weak) UICollectionView *mainView; // 显示图片的collectionView +@property (nonatomic, weak) UICollectionViewFlowLayout *flowLayout; +@property (nonatomic, strong) NSMutableArray *imagesGroup; +@property (nonatomic, strong) NSTimer *timer; +@property (nonatomic, assign) NSInteger totalItemsCount; +@property (nonatomic, weak) TAPageControl *pageControl; + +@end + +@implementation SDCycleScrollView + + +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + [self initialization]; + [self setupMainView]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + if (self = [super initWithCoder:aDecoder]) { + [self initialization]; + [self setupMainView]; + } + return self; +} + +- (void)initialization +{ + _pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; + _autoScrollTimeInterval = 2.0; + _titleLabelTextColor = [UIColor whiteColor]; + _titleLabelTextFont= [UIFont systemFontOfSize:14]; + _titleLabelBackgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; + _titleLabelHeight = 30; + self.backgroundColor = [UIColor lightGrayColor]; +} + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imagesGroup:(NSArray *)imagesGroup +{ + SDCycleScrollView *cycleScrollView = [[self alloc] initWithFrame:frame]; + cycleScrollView.imagesGroup = [NSMutableArray arrayWithArray:imagesGroup]; + return cycleScrollView; +} + ++ (instancetype)cycleScrollViewWithFrame:(CGRect)frame imageURLsGroup:(NSArray *)imageURLsGroup +{ + SDCycleScrollView *cycleScrollView = [[self alloc] initWithFrame:frame]; + cycleScrollView.imageURLsGroup = [NSMutableArray arrayWithArray:imageURLsGroup]; + return cycleScrollView; +} + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + + _flowLayout.itemSize = self.frame.size; +} + +- (void)setPageControlDotSize:(CGSize)pageControlDotSize +{ + _pageControlDotSize = pageControlDotSize; + _pageControl.dotSize = pageControlDotSize; +} + +- (void)setDotColor:(UIColor *)dotColor +{ + _dotColor = dotColor; + _pageControl.dotColor = dotColor; +} + +- (void)setAutoScrollTimeInterval:(CGFloat)autoScrollTimeInterval +{ + _autoScrollTimeInterval = autoScrollTimeInterval; + + [_timer invalidate]; + _timer = nil; + [self setupTimer]; +} + +// 设置显示图片的collectionView +- (void)setupMainView +{ + UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; + flowLayout.itemSize = self.frame.size; + flowLayout.minimumLineSpacing = 0; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + _flowLayout = flowLayout; + + UICollectionView *mainView = [[UICollectionView alloc] initWithFrame:self.frame collectionViewLayout:flowLayout]; + mainView.backgroundColor = [UIColor clearColor]; + mainView.pagingEnabled = YES; + mainView.showsHorizontalScrollIndicator = NO; + mainView.showsVerticalScrollIndicator = NO; + [mainView registerClass:[SDCollectionViewCell class] forCellWithReuseIdentifier:ID]; + mainView.dataSource = self; + mainView.delegate = self; + [self addSubview:mainView]; + _mainView = mainView; +} + +- (void)setImagesGroup:(NSMutableArray *)imagesGroup +{ + _imagesGroup = imagesGroup; + _totalItemsCount = imagesGroup.count * 100; + + [self setupTimer]; + [self setupPageControl]; + [self.mainView reloadData]; +} + +- (void)setImageURLsGroup:(NSArray *)imageURLsGroup +{ + _imageURLsGroup = imageURLsGroup; + + NSMutableArray *images = [NSMutableArray arrayWithCapacity:imageURLsGroup.count]; + for (int i = 0; i < imageURLsGroup.count; i++) { + UIImage *image = [[UIImage alloc] init]; + [images addObject:image]; + } + self.imagesGroup = images; + [self loadImageWithImageURLsGroup:imageURLsGroup]; +} + +- (void)setLocalizationImagesGroup:(NSArray *)localizationImagesGroup +{ + _localizationImagesGroup = localizationImagesGroup; + self.imagesGroup = [NSMutableArray arrayWithArray:localizationImagesGroup]; +} + +- (void)loadImageWithImageURLsGroup:(NSArray *)imageURLsGroup +{ + for (int i = 0; i < imageURLsGroup.count; i++) { + [self loadImageAtIndex:i]; + } +} + +- (void)loadImageAtIndex:(NSInteger)index +{ + NSURL *url = self.imageURLsGroup[index]; + + // 如果有缓存,直接加载缓存 + NSData *data = [NSData getDataCacheWithIdentifier:url.absoluteString]; + if (data) { + [self.imagesGroup setObject:[UIImage imageWithData:data] atIndexedSubscript:index]; + } else { + + // 网络加载图片并缓存图片 + [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:url] + queue:[[NSOperationQueue alloc] init] + completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError){ + if (!connectionError) { + UIImage *image = [UIImage imageWithData:data]; + if (!image) return; // 防止错误数据导致崩溃 + [self.imagesGroup setObject:image atIndexedSubscript:index]; + dispatch_async(dispatch_get_main_queue(), ^{ + if (index == 0) { + [self.mainView reloadData]; + } + }); + [data saveDataCacheWithIdentifier:url.absoluteString]; + } else { // 加载数据失败 + static int repeat = 0; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + if (repeat > 10) return; + [self loadImageAtIndex:index]; + repeat++; + }); + + } + } + + ]; + } + +} + + +- (void)setupPageControl +{ + if (_pageControl) [_pageControl removeFromSuperview]; // 重新加载数据时调整 + TAPageControl *pageControl = [[TAPageControl alloc] init]; + pageControl.numberOfPages = self.imagesGroup.count; + pageControl.dotColor = self.dotColor; + [self addSubview:pageControl]; + _pageControl = pageControl; +} + + +- (void)automaticScroll +{ + if (0 == _totalItemsCount) return; + int currentIndex = _mainView.contentOffset.x / _flowLayout.itemSize.width; + int targetIndex = currentIndex + 1; + if (targetIndex == _totalItemsCount) { + targetIndex = _totalItemsCount * 0.5; + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; + } + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:targetIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; +} + +- (void)setupTimer +{ + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:self.autoScrollTimeInterval target:self selector:@selector(automaticScroll) userInfo:nil repeats:YES]; + _timer = timer; + [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + _mainView.frame = self.bounds; + if (_mainView.contentOffset.x == 0 && _totalItemsCount) { + [_mainView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:_totalItemsCount * 0.5 inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; + } + + CGSize size = [_pageControl sizeForNumberOfPages:self.imagesGroup.count]; + CGFloat x = (self.sd_width - size.width) * 0.5; + if (self.pageControlAliment == SDCycleScrollViewPageContolAlimentRight) { + x = self.mainView.sd_width - size.width - 10; + } + CGFloat y = self.mainView.sd_height - size.height - 10; + _pageControl.frame = CGRectMake(x, y, size.width, size.height); + [_pageControl sizeToFit]; +} +//解决当父View释放时,当前视图因为被Timer强引用而不能释放的问题 +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + if (!newSuperview) { + [_timer invalidate]; + _timer = nil; + } +} + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return _totalItemsCount; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + SDCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath]; + long itemIndex = indexPath.item % self.imagesGroup.count; + cell.imageView.image = self.imagesGroup[itemIndex]; + if (_titlesGroup.count) { + cell.title = _titlesGroup[itemIndex]; + } + + if (!cell.hasConfigured) { + cell.titleLabelBackgroundColor = self.titleLabelBackgroundColor; + cell.titleLabelHeight = self.titleLabelHeight; + cell.titleLabelTextColor = self.titleLabelTextColor; + cell.titleLabelTextFont = self.titleLabelTextFont; + cell.hasConfigured = YES; + } + + return cell; +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath +{ + if ([self.delegate respondsToSelector:@selector(cycleScrollView:didSelectItemAtIndex:)]) { + [self.delegate cycleScrollView:self didSelectItemAtIndex:indexPath.item % self.imagesGroup.count]; + } +} + + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + int itemIndex = (scrollView.contentOffset.x + self.mainView.sd_width * 0.5) / self.mainView.sd_width; + if (!self.imagesGroup.count) return; // 解决清除timer时偶尔会出现的问题 + int indexOnPageControl = itemIndex % self.imagesGroup.count; + _pageControl.currentPage = indexOnPageControl; +} + +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView +{ + [_timer invalidate]; + _timer = nil; +} + +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate +{ + [self setupTimer]; +} + + + +@end diff --git a/SRMonthPicker.h b/SRMonthPicker.h new file mode 100755 index 0000000..e14062f --- /dev/null +++ b/SRMonthPicker.h @@ -0,0 +1,110 @@ +/* + Copyright (C) 2012-2013 Simon Rice + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +#import + +@class SRMonthPicker; + +/** + Defines a set of optional methods you can use to receive change-related + messages for SRMonthPicker objects. All of the methods in this protocol are + optional. Typically, the delegate implements other optional methods to + respond to new selections. + */ +@protocol SRMonthPickerDelegate + +@optional + +/** + Tells the delegate that a specified date is about to be selected. + @param monthPicker A month picker object informing the delegate about the + impending selection. +*/ +- (void)monthPickerWillChangeDate:(SRMonthPicker *)monthPicker; +/** + Tells the delegate that a specified date has been selected. + @param monthPicker A month picker object informing the delegate about the + committed selection. +*/ +- (void)monthPickerDidChangeDate:(SRMonthPicker *)monthPicker; + +@end + +/** + The SRMonthPicker class implements an object that uses multiple rotating + wheels to allow users to select a month and year. This is similar to both + iOS's UIDatePicker set to Date-only mode without the day element and Mobile + Safari's picker view that appears for an `` tag. + + Unlike UIDatePicker, SRMonthPicker does inherit from UIPickerView. It does + use both UIPickerViewDataSource and UIPickerViewDelegate, but presents a + monthPickerDelegate property. +*/ +@interface SRMonthPicker : UIPickerView + +/** + The designated delegate for the month picker. + @warning **Important:** The delegate property is already used internally for + UIPickerView's delegate - **please don't read from or assign to it**! + */ +@property (nonatomic, weak) id monthPickerDelegate; + +/** + The date represented by the month picker. + + The day component is ignored when written, and set to 1 when read. + */ +@property (nonatomic, strong) NSDate* date; + +/// The minimum year that a month picker can show. +@property (nonatomic, strong) NSNumber* minimumYear; + +/// The maximum year that a month picker can show. +@property (nonatomic, strong) NSNumber* maximumYear; + +/// A Boolean value that determines whether the year is shown first. +@property (nonatomic) BOOL yearFirst; + +/// A Boolean value that determines whether the month wraps +@property (nonatomic) BOOL wrapMonths; + +/** + A Boolean value that determines whether the current month & year are coloured. + */ +@property (nonatomic) BOOL enableColourRow; + +/** + Designated initialiser. + + Initializes and returns a newly allocated month picker with the current month + & year. +*/ +-(id)init; +/** + Initializes and returns a newly allocated month picker with the specified + date. + @param date The date to be represented by the month picker - the day + component will be ignored. +*/ +-(id)initWithDate:(NSDate *)date; + +@end diff --git a/SRMonthPicker.m b/SRMonthPicker.m new file mode 100755 index 0000000..6bcd660 --- /dev/null +++ b/SRMonthPicker.m @@ -0,0 +1,313 @@ +/* + Copyright (C) 2012-2013 Simon Rice + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +#import "SRMonthPicker.h" + +#define MONTH_ROW_MULTIPLIER 340 +#define DEFAULT_MINIMUM_YEAR 1 +#define DEFAULT_MAXIMUM_YEAR 99999 +#define DATE_COMPONENT_FLAGS NSMonthCalendarUnit | NSYearCalendarUnit + +@interface SRMonthPicker() + +@property (nonatomic) int monthComponent; +@property (nonatomic) int yearComponent; +@property (nonatomic, readonly) NSArray* monthStrings; + +-(int)yearFromRow:(NSUInteger)row; +-(NSUInteger)rowFromYear:(int)year; + +@end + +@implementation SRMonthPicker + +@synthesize date = _date; +@synthesize monthStrings = _monthStrings; +@synthesize enableColourRow = _enableColourRow; +@synthesize monthPickerDelegate = _monthPickerDelegate; + +-(id)initWithDate:(NSDate *)date +{ + self = [super init]; + + if (self) + { + [self prepare]; + [self setDate:date]; + self.showsSelectionIndicator = YES; + } + + return self; +} + +-(id)init +{ + self = [self initWithDate:[NSDate date]]; + return self; +} + +-(id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + + if (self) + { + [self prepare]; + if (!_date) + [self setDate:[NSDate date]]; + } + + return self; +} + +-(id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) + { + [self prepare]; + if (!_date) + [self setDate:[NSDate date]]; + } + + return self; +} + +-(void)prepare +{ + self.dataSource = self; + self.delegate = self; + + _enableColourRow = YES; + _wrapMonths = YES; +} + +-(id)delegate +{ + return self; +} + +-(void)setDelegate:(id)delegate +{ + if ([delegate isEqual:self]) + [super setDelegate:delegate]; +} + +-(id)dataSource +{ + return self; +} + +-(void)setDataSource:(id)dataSource +{ + if ([dataSource isEqual:self]) + [super setDataSource:dataSource]; +} + +-(int)monthComponent +{ + return self.yearComponent ^ 1; +} + +-(int)yearComponent +{ + return !self.yearFirst; +} + +-(NSArray *)monthStrings +{ + return [[NSDateFormatter alloc] init].monthSymbols; +} + +-(void)setYearFirst:(BOOL)yearFirst +{ + _yearFirst = yearFirst; + NSDate* date = self.date; + [self reloadAllComponents]; + [self setNeedsLayout]; + [self setDate:date]; +} + +-(void)setMinimumYear:(NSNumber *)minimumYear +{ + NSDate* currentDate = self.date; + NSDateComponents* components = [[NSCalendar currentCalendar] components:DATE_COMPONENT_FLAGS fromDate:currentDate]; + components.timeZone = [NSTimeZone defaultTimeZone]; + + if (minimumYear && components.year < minimumYear.integerValue) + components.year = minimumYear.integerValue; + + _minimumYear = minimumYear; + [self reloadAllComponents]; + [self setDate:[[NSCalendar currentCalendar] dateFromComponents:components]]; +} + +-(void)setMaximumYear:(NSNumber *)maximumYear +{ + NSDate* currentDate = self.date; + NSDateComponents* components = [[NSCalendar currentCalendar] components:DATE_COMPONENT_FLAGS fromDate:currentDate]; + components.timeZone = [NSTimeZone defaultTimeZone]; + + if (maximumYear && components.year > maximumYear.integerValue) + components.year = maximumYear.integerValue; + + _maximumYear = maximumYear; + [self reloadAllComponents]; + [self setDate:[[NSCalendar currentCalendar] dateFromComponents:components]]; +} + +-(void)setWrapMonths:(BOOL)wrapMonths +{ + _wrapMonths = wrapMonths; + [self reloadAllComponents]; +} + +-(int)yearFromRow:(NSUInteger)row +{ + long int minYear = DEFAULT_MINIMUM_YEAR; + + if (self.minimumYear) + minYear = self.minimumYear.integerValue; + + return (int)(row + minYear); +} + +-(NSUInteger)rowFromYear:(int)year +{ + long int minYear = DEFAULT_MINIMUM_YEAR; + + if (self.minimumYear) + minYear = self.minimumYear.integerValue; + + return year - minYear; +} + +-(void)setDate:(NSDate *)date +{ + NSDateComponents* components = [[NSCalendar currentCalendar] components:DATE_COMPONENT_FLAGS fromDate:date]; + components.timeZone = [NSTimeZone defaultTimeZone]; + + if (self.minimumYear && components.year < self.minimumYear.integerValue) + components.year = self.minimumYear.integerValue; + else if (self.maximumYear && components.year > self.maximumYear.integerValue) + components.year = self.maximumYear.integerValue; + + if(self.wrapMonths){ + long int monthMidpoint = self.monthStrings.count * (MONTH_ROW_MULTIPLIER / 2); + + [self selectRow:(components.month - 1 + monthMidpoint) inComponent:self.monthComponent animated:NO]; + } + else { + [self selectRow:(components.month - 1) inComponent:self.monthComponent animated:NO]; + } + [self selectRow:[self rowFromYear:(int)components.year] inComponent:self.yearComponent animated:NO]; + + _date = [[NSCalendar currentCalendar] dateFromComponents:components]; +} + +-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component +{ + NSDateComponents* components = [[NSDateComponents alloc] init]; + components.month = 1 + ([self selectedRowInComponent:self.monthComponent] % self.monthStrings.count); + components.year = [self yearFromRow:[self selectedRowInComponent:self.yearComponent]]; + + [self willChangeValueForKey:@"date"]; + if ([self.monthPickerDelegate respondsToSelector:@selector(monthPickerWillChangeDate:)]) + [self.monthPickerDelegate monthPickerWillChangeDate:self]; + + _date = [[NSCalendar currentCalendar] dateFromComponents:components]; + + if ([self.monthPickerDelegate respondsToSelector:@selector(monthPickerDidChangeDate:)]) + [self.monthPickerDelegate monthPickerDidChangeDate:self]; + [self didChangeValueForKey:@"date"]; +} + +-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView +{ + return 2; +} + +-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component +{ + if (component == self.monthComponent && !self.wrapMonths) + return self.monthStrings.count; + else if(component == self.monthComponent) + return MONTH_ROW_MULTIPLIER * self.monthStrings.count; + + int maxYear = DEFAULT_MAXIMUM_YEAR; + if (self.maximumYear) + maxYear =(int) self.maximumYear.integerValue; + + return [self rowFromYear:maxYear] + 1; +} + +-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component +{ + if (component == self.monthComponent) + return 150.0f; + else + return 76.0f; +} + +-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view +{ + CGFloat width = [self pickerView:self widthForComponent:component]; + CGRect frame = CGRectMake(0.0f, 0.0f, width, 45.0f); + + if (component == self.monthComponent) + { + const CGFloat padding = 9.0f; + if (component) { + frame.origin.x += padding; + frame.size.width -= padding; + } + + frame.size.width -= padding; + } + + UILabel* label = [[UILabel alloc] initWithFrame:frame]; + + NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; + + if (component == self.monthComponent) { + label.text = [self.monthStrings objectAtIndex:(row % self.monthStrings.count)]; + formatter.dateFormat = @"MMMM"; + label.textAlignment = component ? NSTextAlignmentLeft : NSTextAlignmentRight; + } else { + label.text = [NSString stringWithFormat:@"%d", [self yearFromRow:row]]; + label.textAlignment = NSTextAlignmentCenter; + formatter.dateFormat = @"y"; + } + + if (_enableColourRow && [[formatter stringFromDate:[NSDate date]] isEqualToString:label.text]) + label.textColor = [UIColor colorWithRed:0.0f green:0.35f blue:0.91f alpha:1.0f]; + + label.font = [UIFont systemFontOfSize:20]; + label.backgroundColor = [UIColor clearColor]; + label.shadowOffset = CGSizeMake(0.0f, 0.1f); + label.shadowColor = [UIColor whiteColor]; + + return label; +} + +@end diff --git a/STUV_city.plist b/STUV_city.plist new file mode 100644 index 0000000..aefb49b --- /dev/null +++ b/STUV_city.plist @@ -0,0 +1,38 @@ + + + + + + hot_city + 上海 + + + hot_city + 深圳 + + + hot_city + 天津 + + + hot_city + 苏州 + + + hot_city + 韶关 + + + hot_city + 石家庄 + + + hot_city + 太原 + + + hot_city + 沈阳 + + + diff --git a/SampleViewController.h b/SampleViewController.h new file mode 100755 index 0000000..151664b --- /dev/null +++ b/SampleViewController.h @@ -0,0 +1,13 @@ +// +// SampleViewController.h +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@interface SampleViewController : UIViewController + +@end diff --git a/SampleViewController.m b/SampleViewController.m new file mode 100755 index 0000000..633f0a5 --- /dev/null +++ b/SampleViewController.m @@ -0,0 +1,30 @@ +// +// SampleViewController.m +// YSLContainerViewControllerDemo +// +// Created by yamaguchi on 2015/03/25. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "SampleViewController.h" + +@interface SampleViewController () + +@end + +@implementation SampleViewController + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + NSLog(@"SampleViewController viewWillAppear"); +} + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +@end diff --git a/SampleViewController.xib b/SampleViewController.xib new file mode 100755 index 0000000..d23afd1 --- /dev/null +++ b/SampleViewController.xib @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main.xcodeproj/project.pbxproj b/ShiXiSeng_Main.xcodeproj/project.pbxproj index 47a961b..aab5cad 100644 --- a/ShiXiSeng_Main.xcodeproj/project.pbxproj +++ b/ShiXiSeng_Main.xcodeproj/project.pbxproj @@ -7,14 +7,170 @@ objects = { /* Begin PBXBuildFile section */ + 841068361AF78875004E3A91 /* image1.png in Resources */ = {isa = PBXBuildFile; fileRef = 841068321AF78875004E3A91 /* image1.png */; }; + 841068371AF78875004E3A91 /* image0.png in Resources */ = {isa = PBXBuildFile; fileRef = 841068331AF78875004E3A91 /* image0.png */; }; + 841068381AF78875004E3A91 /* image3.png in Resources */ = {isa = PBXBuildFile; fileRef = 841068341AF78875004E3A91 /* image3.png */; }; + 841068391AF78875004E3A91 /* image2.png in Resources */ = {isa = PBXBuildFile; fileRef = 841068351AF78875004E3A91 /* image2.png */; }; + 8410683D1AF78975004E3A91 /* FindViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8410683C1AF78975004E3A91 /* FindViewController.m */; }; + 842065D41B010E0500C3B5AB /* CNPPopupController.m in Sources */ = {isa = PBXBuildFile; fileRef = 842065D31B010E0500C3B5AB /* CNPPopupController.m */; }; + 842B8DF01B008CBA00A5A65B /* EAIntroPage.m in Sources */ = {isa = PBXBuildFile; fileRef = 842B8DED1B008CBA00A5A65B /* EAIntroPage.m */; }; + 842B8DF11B008CBA00A5A65B /* EAIntroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 842B8DEF1B008CBA00A5A65B /* EAIntroView.m */; }; + 8430AE901B0B07EC0054C032 /* CustomToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 8430AE8F1B0B07EC0054C032 /* CustomToolbar.m */; }; + 8451282C1B0B3DE300CF9F2A /* salary_range.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128231B0B3DE300CF9F2A /* salary_range.plist */; }; + 8451282D1B0B3DE300CF9F2A /* work_cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128251B0B3DE300CF9F2A /* work_cell.m */; }; + 8451282E1B0B3DE300CF9F2A /* Work_Day.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128271B0B3DE300CF9F2A /* Work_Day.m */; }; + 8451282F1B0B3DE300CF9F2A /* work_days.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128281B0B3DE300CF9F2A /* work_days.plist */; }; + 845128301B0B3DE300CF9F2A /* work_time.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128291B0B3DE300CF9F2A /* work_time.plist */; }; + 845128451B0B3E7600CF9F2A /* DownSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128331B0B3E7600CF9F2A /* DownSheet.m */; }; + 845128461B0B3E7600CF9F2A /* DownSheetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128351B0B3E7600CF9F2A /* DownSheetCell.m */; }; + 845128471B0B3E7600CF9F2A /* job_first.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128361B0B3E7600CF9F2A /* job_first.plist */; }; + 845128481B0B3E7600CF9F2A /* job_second(0).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128371B0B3E7600CF9F2A /* job_second(0).plist */; }; + 845128491B0B3E7600CF9F2A /* job_second(1).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128381B0B3E7600CF9F2A /* job_second(1).plist */; }; + 8451284A1B0B3E7600CF9F2A /* job_second(2).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128391B0B3E7600CF9F2A /* job_second(2).plist */; }; + 8451284B1B0B3E7600CF9F2A /* job_second(3).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283A1B0B3E7600CF9F2A /* job_second(3).plist */; }; + 8451284C1B0B3E7600CF9F2A /* job_second(4).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283B1B0B3E7600CF9F2A /* job_second(4).plist */; }; + 8451284D1B0B3E7600CF9F2A /* job_second(5).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283C1B0B3E7600CF9F2A /* job_second(5).plist */; }; + 8451284E1B0B3E7600CF9F2A /* job_second(6).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283D1B0B3E7600CF9F2A /* job_second(6).plist */; }; + 8451284F1B0B3E7600CF9F2A /* job_second(7).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283E1B0B3E7600CF9F2A /* job_second(7).plist */; }; + 845128501B0B3E7600CF9F2A /* job_second(8).plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451283F1B0B3E7600CF9F2A /* job_second(8).plist */; }; + 845128511B0B3E7600CF9F2A /* job_second(9).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128401B0B3E7600CF9F2A /* job_second(9).plist */; }; + 845128521B0B3E7600CF9F2A /* job_second(10).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128411B0B3E7600CF9F2A /* job_second(10).plist */; }; + 845128531B0B3E7600CF9F2A /* job_third(0).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128421B0B3E7600CF9F2A /* job_third(0).plist */; }; + 845128541B0B3E7600CF9F2A /* job_third(1).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128431B0B3E7600CF9F2A /* job_third(1).plist */; }; + 845128551B0B3E7600CF9F2A /* job_third(2).plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128441B0B3E7600CF9F2A /* job_third(2).plist */; }; + 8451285D1B0B465100CF9F2A /* ABCDEF_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128561B0B465100CF9F2A /* ABCDEF_city.plist */; }; + 8451285E1B0B465100CF9F2A /* GHIJ_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128571B0B465100CF9F2A /* GHIJ_city.plist */; }; + 8451285F1B0B465100CF9F2A /* hot_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128581B0B465100CF9F2A /* hot_city.plist */; }; + 845128601B0B465100CF9F2A /* KLMN_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128591B0B465100CF9F2A /* KLMN_city.plist */; }; + 845128611B0B465100CF9F2A /* OPQR_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451285A1B0B465100CF9F2A /* OPQR_city.plist */; }; + 845128621B0B465100CF9F2A /* STUV_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451285B1B0B465100CF9F2A /* STUV_city.plist */; }; + 845128631B0B465100CF9F2A /* WXYZ_city.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451285C1B0B465100CF9F2A /* WXYZ_city.plist */; }; + 8451286A1B0B46BC00CF9F2A /* CollectionHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128651B0B46BC00CF9F2A /* CollectionHeadView.m */; }; + 8451286B1B0B46BC00CF9F2A /* test.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128671B0B46BC00CF9F2A /* test.m */; }; + 8451286C1B0B46BC00CF9F2A /* testcell.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128691B0B46BC00CF9F2A /* testcell.m */; }; + 845128721B0B518B00CF9F2A /* job_sub_content.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128711B0B518B00CF9F2A /* job_sub_content.m */; }; + 845128741B0B51DC00CF9F2A /* send_cycle.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128731B0B51DC00CF9F2A /* send_cycle.plist */; }; + 8451287A1B0B6C4300CF9F2A /* industry_cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128761B0B6C4300CF9F2A /* industry_cell.m */; }; + 8451287B1B0B6C4300CF9F2A /* industry.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128781B0B6C4300CF9F2A /* industry.m */; }; + 8451287C1B0B6C4300CF9F2A /* industry.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128791B0B6C4300CF9F2A /* industry.plist */; }; + 845128811B0B9D9A00CF9F2A /* lowest_study.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128801B0B9D9A00CF9F2A /* lowest_study.plist */; }; + 845128841B0BA40E00CF9F2A /* Hope.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128831B0BA40E00CF9F2A /* Hope.m */; }; + 845128881B0BAC1C00CF9F2A /* work_time.plist in Resources */ = {isa = PBXBuildFile; fileRef = 845128871B0BAC1C00CF9F2A /* work_time.plist */; }; + 845128901B0BB35D00CF9F2A /* school_exp.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8451288F1B0BB35D00CF9F2A /* school_exp.plist */; }; + 845128931B0BB3AC00CF9F2A /* School_exp.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128921B0BB3AC00CF9F2A /* School_exp.m */; }; + 8451289A1B0BB78C00CF9F2A /* SRMonthPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128991B0BB78C00CF9F2A /* SRMonthPicker.m */; }; + 845128A31B0C4AB300CF9F2A /* Project_exp.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128A21B0C4AB300CF9F2A /* Project_exp.m */; }; + 845128A61B0C51F500CF9F2A /* Education_exp.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128A51B0C51F500CF9F2A /* Education_exp.m */; }; + 845128A91B0C59CC00CF9F2A /* work_exp.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128A81B0C59CC00CF9F2A /* work_exp.m */; }; + 845128AC1B0CB62500CF9F2A /* jobcollect_cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 845128AB1B0CB62500CF9F2A /* jobcollect_cell.m */; }; + 845311591AFDE4CA005FEE81 /* position.m in Sources */ = {isa = PBXBuildFile; fileRef = 845311581AFDE4CA005FEE81 /* position.m */; }; + 8453115D1AFDEB03005FEE81 /* MsgCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8453115C1AFDEB03005FEE81 /* MsgCell.m */; }; + 8453115F1AFDEB23005FEE81 /* MsgCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8453115E1AFDEB23005FEE81 /* MsgCell.xib */; }; + 845311691AFDEEF7005FEE81 /* AllMsg.xib in Resources */ = {isa = PBXBuildFile; fileRef = 845311681AFDEEF7005FEE81 /* AllMsg.xib */; }; + 8453116C1AFDF05B005FEE81 /* AllMsg.m in Sources */ = {isa = PBXBuildFile; fileRef = 8453116B1AFDF05B005FEE81 /* AllMsg.m */; }; + 8453116F1AFDFAFB005FEE81 /* lookMsg.m in Sources */ = {isa = PBXBuildFile; fileRef = 8453116E1AFDFAFB005FEE81 /* lookMsg.m */; }; + 845311711AFDFB59005FEE81 /* lookMsg.xib in Resources */ = {isa = PBXBuildFile; fileRef = 845311701AFDFB59005FEE81 /* lookMsg.xib */; }; + 845311731AFDFBBA005FEE81 /* InteMsg.xib in Resources */ = {isa = PBXBuildFile; fileRef = 845311721AFDFBBA005FEE81 /* InteMsg.xib */; }; + 845311761AFDFBDC005FEE81 /* InteMsg.m in Sources */ = {isa = PBXBuildFile; fileRef = 845311751AFDFBDC005FEE81 /* InteMsg.m */; }; + 845311791AFDFC27005FEE81 /* RefuseMsg.m in Sources */ = {isa = PBXBuildFile; fileRef = 845311781AFDFC27005FEE81 /* RefuseMsg.m */; }; + 8453117B1AFDFCBB005FEE81 /* RefuseMsg.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8453117A1AFDFCBB005FEE81 /* RefuseMsg.xib */; }; + 8453117E1AFE18E1005FEE81 /* com.m in Sources */ = {isa = PBXBuildFile; fileRef = 8453117D1AFE18E1005FEE81 /* com.m */; }; + 845311841AFE1F0D005FEE81 /* FixCom.m in Sources */ = {isa = PBXBuildFile; fileRef = 845311831AFE1F0D005FEE81 /* FixCom.m */; }; + 8464F47D1AFA4D1700F038A0 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8464F4791AFA4D1700F038A0 /* MobileCoreServices.framework */; }; + 8464F47E1AFA4D1700F038A0 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8464F47A1AFA4D1700F038A0 /* SystemConfiguration.framework */; }; + 8464F47F1AFA4D1700F038A0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8464F47B1AFA4D1700F038A0 /* Security.framework */; }; + 846E59701AFC88C200AAB57B /* JobCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E596F1AFC88C200AAB57B /* JobCell.m */; }; + 846E59781AFCA81900AAB57B /* Job.xib in Resources */ = {isa = PBXBuildFile; fileRef = 846E59771AFCA81900AAB57B /* Job.xib */; }; + 846E597D1AFCA8D600AAB57B /* JobTable.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E597C1AFCA8D600AAB57B /* JobTable.m */; }; + 846E59811AFCFF0B00AAB57B /* TESTTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E59801AFCFF0B00AAB57B /* TESTTableViewController.m */; }; + 846E8F0D1B0445C400A02A35 /* Fill_Record.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E8F0C1B0445C400A02A35 /* Fill_Record.m */; }; + 846E8F101B0445E100A02A35 /* Fill_Record_Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E8F0F1B0445E100A02A35 /* Fill_Record_Cell.m */; }; + 846E8F121B045F1600A02A35 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 846E8F111B045F1600A02A35 /* Main.storyboard */; }; + 846E8F181B04FD8900A02A35 /* Job_Subscribe.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E8F171B04FD8900A02A35 /* Job_Subscribe.m */; }; + 846E8F1E1B0508FB00A02A35 /* Job_Sub_Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 846E8F1D1B0508FB00A02A35 /* Job_Sub_Cell.m */; }; + 848D8CDF1AFBCCB800D808C9 /* Register.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CDE1AFBCCB800D808C9 /* Register.m */; }; + 848D8CE31AFBCD2700D808C9 /* Jobdetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CE21AFBCD2700D808C9 /* Jobdetail.m */; }; + 848D8CE61AFBCD4400D808C9 /* CompanyPosition.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CE51AFBCD4400D808C9 /* CompanyPosition.m */; }; + 848D8CEC1AFBCDFC00D808C9 /* MsgDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CEB1AFBCDFC00D808C9 /* MsgDetail.m */; }; + 848D8CF01AFBCED000D808C9 /* Personinfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CEF1AFBCED000D808C9 /* Personinfo.m */; }; + 848D8CF91AFBCFBC00D808C9 /* Accountset.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CF81AFBCFBC00D808C9 /* Accountset.m */; }; + 848D8CFD1AFBD00200D808C9 /* NewMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8CFC1AFBD00200D808C9 /* NewMessage.m */; }; + 848D8D011AFBD04200D808C9 /* About.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8D001AFBD04200D808C9 /* About.m */; }; + 848D8D051AFBD08400D808C9 /* Rest.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8D041AFBD08400D808C9 /* Rest.m */; }; + 848D8D091AFBD10100D808C9 /* JobInfoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8D081AFBD10100D808C9 /* JobInfoa.m */; }; + 848D8D0E1AFBD13C00D808C9 /* CompanyInfoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8D0D1AFBD13C00D808C9 /* CompanyInfoa.m */; }; + 848D8D111AFBD14F00D808C9 /* JobCollect.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D8D101AFBD14F00D808C9 /* JobCollect.m */; }; + 848DC7551AF9AEDC0067A5F6 /* test1.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC74F1AF9AEDC0067A5F6 /* test1.png */; }; + 848DC7561AF9AEDC0067A5F6 /* test2.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7501AF9AEDC0067A5F6 /* test2.png */; }; + 848DC7571AF9AEDC0067A5F6 /* test3.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7511AF9AEDC0067A5F6 /* test3.png */; }; + 848DC7581AF9AEDC0067A5F6 /* test4.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7521AF9AEDC0067A5F6 /* test4.png */; }; + 848DC7591AF9AEDC0067A5F6 /* test5.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7531AF9AEDC0067A5F6 /* test5.png */; }; + 848DC75A1AF9AEDC0067A5F6 /* test6.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7541AF9AEDC0067A5F6 /* test6.png */; }; + 848DC7621AF9CAA00067A5F6 /* qq.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC75F1AF9CAA00067A5F6 /* qq.png */; }; + 848DC7631AF9CAA00067A5F6 /* sina.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7601AF9CAA00067A5F6 /* sina.png */; }; + 848DC7641AF9CAA00067A5F6 /* wechat.png in Resources */ = {isa = PBXBuildFile; fileRef = 848DC7611AF9CAA00067A5F6 /* wechat.png */; }; + 848DC7671AF9D3520067A5F6 /* SignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 848DC7661AF9D3520067A5F6 /* SignIn.m */; }; + 84AC8D241AF8B4B600892728 /* 嘀嗒清单.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D231AF8B4B600892728 /* 嘀嗒清单.png */; }; + 84AC8D261AF8B95700892728 /* 中国科学院.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D251AF8B95700892728 /* 中国科学院.png */; }; + 84AC8D281AF8BBCF00892728 /* 京东.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D271AF8BBCF00892728 /* 京东.png */; }; + 84AC8D2A1AF8BBE300892728 /* 联想.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D291AF8BBE300892728 /* 联想.png */; }; + 84AC8D2C1AF8BBEF00892728 /* 爱奇艺.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D2B1AF8BBEF00892728 /* 爱奇艺.png */; }; + 84AC8D2E1AF8BC0B00892728 /* 百词斩.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D2D1AF8BC0B00892728 /* 百词斩.png */; }; + 84AC8D331AF8BD9F00892728 /* >=.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D321AF8BD9F00892728 /* >=.png */; }; + 84AC8D351AF8BE2C00892728 /* 定位.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D341AF8BE2C00892728 /* 定位.png */; }; + 84AC8D371AF8BEBF00892728 /* 日历.png in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D361AF8BEBF00892728 /* 日历.png */; }; + 84AC8D391AF8BF1500892728 /* Job.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84AC8D381AF8BF1500892728 /* Job.plist */; }; + 84AC8D3C1AF8C22300892728 /* Job.m in Sources */ = {isa = PBXBuildFile; fileRef = 84AC8D3B1AF8C22300892728 /* Job.m */; }; + 84B52D081AF68B4B000FF1B3 /* MViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B52D071AF68B4B000FF1B3 /* MViewController.m */; }; + 84B52D131AF6A658000FF1B3 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84B52D121AF6A658000FF1B3 /* Images.xcassets */; }; 84EAF7771AF4C1AB001B6014 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF7761AF4C1AB001B6014 /* main.m */; }; 84EAF77A1AF4C1AB001B6014 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF7791AF4C1AB001B6014 /* AppDelegate.m */; }; 84EAF77D1AF4C1AB001B6014 /* ShiXiSeng_Main.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF77B1AF4C1AB001B6014 /* ShiXiSeng_Main.xcdatamodeld */; }; 84EAF7801AF4C1AB001B6014 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF77F1AF4C1AB001B6014 /* ViewController.m */; }; - 84EAF7831AF4C1AB001B6014 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 84EAF7811AF4C1AB001B6014 /* Main.storyboard */; }; - 84EAF7851AF4C1AB001B6014 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 84EAF7841AF4C1AB001B6014 /* Images.xcassets */; }; 84EAF7881AF4C1AB001B6014 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84EAF7861AF4C1AB001B6014 /* LaunchScreen.xib */; }; 84EAF7941AF4C1AB001B6014 /* ShiXiSeng_MainTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF7931AF4C1AB001B6014 /* ShiXiSeng_MainTests.m */; }; + 84EAF7A31AF50670001B6014 /* MessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EAF7A21AF50670001B6014 /* MessageViewController.m */; }; + 84EB5CBD1AF7363500D10953 /* ExitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EB5CBC1AF7363500D10953 /* ExitViewController.m */; }; + 84EB5CC11AF7417D00D10953 /* PwdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EB5CC01AF7417D00D10953 /* PwdViewController.m */; }; + 84EB5CC51AF7591F00D10953 /* FeedBackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EB5CC41AF7591F00D10953 /* FeedBackViewController.m */; }; + 84ED3BB91AF78C53009A77FB /* SDCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BB41AF78C53009A77FB /* SDCollectionViewCell.m */; }; + 84ED3BBA1AF78C53009A77FB /* SDCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BB61AF78C53009A77FB /* SDCycleScrollView.m */; }; + 84ED3BBB1AF78C53009A77FB /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BB81AF78C53009A77FB /* UIView+SDExtension.m */; }; + 84ED3BC51AF78C70009A77FB /* TAAbstractDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BBE1AF78C70009A77FB /* TAAbstractDotView.m */; }; + 84ED3BC61AF78C70009A77FB /* TAAnimatedDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BC01AF78C70009A77FB /* TAAnimatedDotView.m */; }; + 84ED3BC71AF78C70009A77FB /* TADotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BC21AF78C70009A77FB /* TADotView.m */; }; + 84ED3BC81AF78C70009A77FB /* TAPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BC41AF78C70009A77FB /* TAPageControl.m */; }; + 84ED3BCB1AF78C85009A77FB /* NSData+SDDataCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BCA1AF78C85009A77FB /* NSData+SDDataCache.m */; }; + 84ED3BCF1AF78FB9009A77FB /* ChanceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BCE1AF78FB9009A77FB /* ChanceViewController.m */; }; + 84ED3BDB1AF792EC009A77FB /* PlayListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BD61AF792EC009A77FB /* PlayListCell.m */; }; + 84ED3BDC1AF792EC009A77FB /* PlayListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BD71AF792EC009A77FB /* PlayListCell.xib */; }; + 84ED3BDD1AF792EC009A77FB /* ArtistsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BD91AF792EC009A77FB /* ArtistsCell.m */; }; + 84ED3BDE1AF792EC009A77FB /* ArtistsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BDA1AF792EC009A77FB /* ArtistsCell.xib */; }; + 84ED3BEB1AF79307009A77FB /* PlayListTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BE01AF79307009A77FB /* PlayListTableViewController.m */; }; + 84ED3BEC1AF79307009A77FB /* PlayListTableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BE11AF79307009A77FB /* PlayListTableViewController.xib */; }; + 84ED3BED1AF79307009A77FB /* ArtistsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BE31AF79307009A77FB /* ArtistsViewController.m */; }; + 84ED3BEE1AF79307009A77FB /* ArtistsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BE41AF79307009A77FB /* ArtistsViewController.xib */; }; + 84ED3BEF1AF79307009A77FB /* SampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BE61AF79307009A77FB /* SampleViewController.m */; }; + 84ED3BF01AF79307009A77FB /* SampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BE71AF79307009A77FB /* SampleViewController.xib */; }; + 84ED3BF11AF79307009A77FB /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BE91AF79307009A77FB /* DetailViewController.m */; }; + 84ED3BF21AF79307009A77FB /* DetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84ED3BEA1AF79307009A77FB /* DetailViewController.xib */; }; + 84ED3BF71AF7931A009A77FB /* YSLContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BF41AF7931A009A77FB /* YSLContainerViewController.m */; }; + 84ED3BF81AF7931A009A77FB /* YSLScrollMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3BF61AF7931A009A77FB /* YSLScrollMenuView.m */; }; + 84ED3C0D1AF793EC009A77FB /* FindControllerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84ED3C0C1AF793EC009A77FB /* FindControllerViewController.m */; }; + 84F1BC0B1B034E1800B89DBD /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BBF91B034E1800B89DBD /* AFHTTPRequestOperation.m */; }; + 84F1BC0C1B034E1800B89DBD /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BBFB1B034E1800B89DBD /* AFHTTPRequestOperationManager.m */; }; + 84F1BC0D1B034E1800B89DBD /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BBFD1B034E1800B89DBD /* AFHTTPSessionManager.m */; }; + 84F1BC0E1B034E1800B89DBD /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC001B034E1800B89DBD /* AFNetworkReachabilityManager.m */; }; + 84F1BC0F1B034E1800B89DBD /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC021B034E1800B89DBD /* AFSecurityPolicy.m */; }; + 84F1BC101B034E1800B89DBD /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC041B034E1800B89DBD /* AFURLConnectionOperation.m */; }; + 84F1BC111B034E1800B89DBD /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC061B034E1800B89DBD /* AFURLRequestSerialization.m */; }; + 84F1BC121B034E1800B89DBD /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC081B034E1800B89DBD /* AFURLResponseSerialization.m */; }; + 84F1BC131B034E1800B89DBD /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC0A1B034E1800B89DBD /* AFURLSessionManager.m */; }; + 84F1BC161B034F2C00B89DBD /* PooCodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC151B034F2C00B89DBD /* PooCodeView.m */; }; + 84F1BC1C1B03705900B89DBD /* VPImageCropperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC1B1B03705900B89DBD /* VPImageCropperViewController.m */; }; + 84F1BC261B037BD000B89DBD /* DAContextMenuCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC211B037BD000B89DBD /* DAContextMenuCell.m */; }; + 84F1BC271B037BD000B89DBD /* DAContextMenuTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC231B037BD000B89DBD /* DAContextMenuTableViewController.m */; }; + 84F1BC281B037BD000B89DBD /* DAOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F1BC251B037BD000B89DBD /* DAOverlayView.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -28,6 +184,176 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 841068321AF78875004E3A91 /* image1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image1.png; sourceTree = ""; }; + 841068331AF78875004E3A91 /* image0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image0.png; sourceTree = ""; }; + 841068341AF78875004E3A91 /* image3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image3.png; sourceTree = ""; }; + 841068351AF78875004E3A91 /* image2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image2.png; sourceTree = ""; }; + 8410683B1AF78975004E3A91 /* FindViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindViewController.h; sourceTree = ""; }; + 8410683C1AF78975004E3A91 /* FindViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FindViewController.m; sourceTree = ""; }; + 842065D21B010DF500C3B5AB /* CNPPopupController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CNPPopupController.h; sourceTree = ""; }; + 842065D31B010E0500C3B5AB /* CNPPopupController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNPPopupController.m; sourceTree = ""; }; + 842B8DEB1B008C8E00A5A65B /* EAIntroView-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "EAIntroView-Prefix.pch"; path = "../../../../EAIntroView-master/Supporting-files/EAIntroView-Prefix.pch"; sourceTree = ""; }; + 842B8DEC1B008CBA00A5A65B /* EAIntroPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EAIntroPage.h; sourceTree = ""; }; + 842B8DED1B008CBA00A5A65B /* EAIntroPage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EAIntroPage.m; sourceTree = ""; }; + 842B8DEE1B008CBA00A5A65B /* EAIntroView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EAIntroView.h; sourceTree = ""; }; + 842B8DEF1B008CBA00A5A65B /* EAIntroView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EAIntroView.m; sourceTree = ""; }; + 842B8DF21B008DF300A5A65B /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; + 8430AE8E1B0B07EC0054C032 /* CustomToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomToolbar.h; sourceTree = ""; }; + 8430AE8F1B0B07EC0054C032 /* CustomToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomToolbar.m; sourceTree = ""; }; + 845128231B0B3DE300CF9F2A /* salary_range.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = salary_range.plist; path = ShiXiSeng_Main/salary_range.plist; sourceTree = ""; }; + 845128241B0B3DE300CF9F2A /* work_cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = work_cell.h; path = ShiXiSeng_Main/work_cell.h; sourceTree = ""; }; + 845128251B0B3DE300CF9F2A /* work_cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = work_cell.m; path = ShiXiSeng_Main/work_cell.m; sourceTree = ""; }; + 845128261B0B3DE300CF9F2A /* Work_Day.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Work_Day.h; path = ShiXiSeng_Main/Work_Day.h; sourceTree = ""; }; + 845128271B0B3DE300CF9F2A /* Work_Day.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Work_Day.m; path = ShiXiSeng_Main/Work_Day.m; sourceTree = ""; }; + 845128281B0B3DE300CF9F2A /* work_days.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = work_days.plist; path = ShiXiSeng_Main/work_days.plist; sourceTree = ""; }; + 845128291B0B3DE300CF9F2A /* work_time.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = work_time.plist; path = ShiXiSeng_Main/work_time.plist; sourceTree = ""; }; + 845128321B0B3E7600CF9F2A /* DownSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownSheet.h; path = ShiXiSeng_Main/Classes/DownSheet.h; sourceTree = ""; }; + 845128331B0B3E7600CF9F2A /* DownSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DownSheet.m; path = ShiXiSeng_Main/Classes/DownSheet.m; sourceTree = ""; }; + 845128341B0B3E7600CF9F2A /* DownSheetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DownSheetCell.h; path = ShiXiSeng_Main/Classes/DownSheetCell.h; sourceTree = ""; }; + 845128351B0B3E7600CF9F2A /* DownSheetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DownSheetCell.m; path = ShiXiSeng_Main/Classes/DownSheetCell.m; sourceTree = ""; }; + 845128361B0B3E7600CF9F2A /* job_first.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = job_first.plist; path = ShiXiSeng_Main/Classes/job_first.plist; sourceTree = ""; }; + 845128371B0B3E7600CF9F2A /* job_second(0).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(0).plist"; path = "ShiXiSeng_Main/Classes/job_second(0).plist"; sourceTree = ""; }; + 845128381B0B3E7600CF9F2A /* job_second(1).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(1).plist"; path = "ShiXiSeng_Main/Classes/job_second(1).plist"; sourceTree = ""; }; + 845128391B0B3E7600CF9F2A /* job_second(2).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(2).plist"; path = "ShiXiSeng_Main/Classes/job_second(2).plist"; sourceTree = ""; }; + 8451283A1B0B3E7600CF9F2A /* job_second(3).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(3).plist"; path = "ShiXiSeng_Main/Classes/job_second(3).plist"; sourceTree = ""; }; + 8451283B1B0B3E7600CF9F2A /* job_second(4).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(4).plist"; path = "ShiXiSeng_Main/Classes/job_second(4).plist"; sourceTree = ""; }; + 8451283C1B0B3E7600CF9F2A /* job_second(5).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(5).plist"; path = "ShiXiSeng_Main/Classes/job_second(5).plist"; sourceTree = ""; }; + 8451283D1B0B3E7600CF9F2A /* job_second(6).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(6).plist"; path = "ShiXiSeng_Main/Classes/job_second(6).plist"; sourceTree = ""; }; + 8451283E1B0B3E7600CF9F2A /* job_second(7).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(7).plist"; path = "ShiXiSeng_Main/Classes/job_second(7).plist"; sourceTree = ""; }; + 8451283F1B0B3E7600CF9F2A /* job_second(8).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(8).plist"; path = "ShiXiSeng_Main/Classes/job_second(8).plist"; sourceTree = ""; }; + 845128401B0B3E7600CF9F2A /* job_second(9).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(9).plist"; path = "ShiXiSeng_Main/Classes/job_second(9).plist"; sourceTree = ""; }; + 845128411B0B3E7600CF9F2A /* job_second(10).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_second(10).plist"; path = "ShiXiSeng_Main/Classes/job_second(10).plist"; sourceTree = ""; }; + 845128421B0B3E7600CF9F2A /* job_third(0).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_third(0).plist"; path = "ShiXiSeng_Main/Classes/job_third(0).plist"; sourceTree = ""; }; + 845128431B0B3E7600CF9F2A /* job_third(1).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_third(1).plist"; path = "ShiXiSeng_Main/Classes/job_third(1).plist"; sourceTree = ""; }; + 845128441B0B3E7600CF9F2A /* job_third(2).plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "job_third(2).plist"; path = "ShiXiSeng_Main/Classes/job_third(2).plist"; sourceTree = ""; }; + 845128561B0B465100CF9F2A /* ABCDEF_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ABCDEF_city.plist; sourceTree = ""; }; + 845128571B0B465100CF9F2A /* GHIJ_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = GHIJ_city.plist; sourceTree = ""; }; + 845128581B0B465100CF9F2A /* hot_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = hot_city.plist; sourceTree = ""; }; + 845128591B0B465100CF9F2A /* KLMN_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = KLMN_city.plist; sourceTree = ""; }; + 8451285A1B0B465100CF9F2A /* OPQR_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OPQR_city.plist; sourceTree = ""; }; + 8451285B1B0B465100CF9F2A /* STUV_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = STUV_city.plist; sourceTree = ""; }; + 8451285C1B0B465100CF9F2A /* WXYZ_city.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = WXYZ_city.plist; sourceTree = ""; }; + 845128641B0B46BC00CF9F2A /* CollectionHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CollectionHeadView.h; path = city/CollectionHeadView.h; sourceTree = ""; }; + 845128651B0B46BC00CF9F2A /* CollectionHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CollectionHeadView.m; path = city/CollectionHeadView.m; sourceTree = ""; }; + 845128661B0B46BC00CF9F2A /* test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test.h; path = city/test.h; sourceTree = ""; }; + 845128671B0B46BC00CF9F2A /* test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = test.m; path = city/test.m; sourceTree = ""; }; + 845128681B0B46BC00CF9F2A /* testcell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = testcell.h; path = city/testcell.h; sourceTree = ""; }; + 845128691B0B46BC00CF9F2A /* testcell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = testcell.m; path = city/testcell.m; sourceTree = ""; }; + 845128701B0B518B00CF9F2A /* job_sub_content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = job_sub_content.h; sourceTree = ""; }; + 845128711B0B518B00CF9F2A /* job_sub_content.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = job_sub_content.m; sourceTree = ""; }; + 845128731B0B51DC00CF9F2A /* send_cycle.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = send_cycle.plist; path = DownSheet/DownSheet/send_cycle.plist; sourceTree = ""; }; + 845128751B0B6C4300CF9F2A /* industry_cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = industry_cell.h; sourceTree = ""; }; + 845128761B0B6C4300CF9F2A /* industry_cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = industry_cell.m; sourceTree = ""; }; + 845128771B0B6C4300CF9F2A /* industry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = industry.h; sourceTree = ""; }; + 845128781B0B6C4300CF9F2A /* industry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = industry.m; sourceTree = ""; }; + 845128791B0B6C4300CF9F2A /* industry.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = industry.plist; sourceTree = ""; }; + 845128801B0B9D9A00CF9F2A /* lowest_study.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = lowest_study.plist; sourceTree = ""; }; + 845128821B0BA40E00CF9F2A /* Hope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hope.h; sourceTree = ""; }; + 845128831B0BA40E00CF9F2A /* Hope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Hope.m; sourceTree = ""; }; + 845128871B0BAC1C00CF9F2A /* work_time.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = work_time.plist; path = DownSheet/DownSheet/work_time.plist; sourceTree = ""; }; + 8451288F1B0BB35D00CF9F2A /* school_exp.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = school_exp.plist; path = DownSheet/DownSheet/school_exp.plist; sourceTree = ""; }; + 845128911B0BB3AC00CF9F2A /* School_exp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = School_exp.h; sourceTree = ""; }; + 845128921B0BB3AC00CF9F2A /* School_exp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = School_exp.m; sourceTree = ""; }; + 845128981B0BB78C00CF9F2A /* SRMonthPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SRMonthPicker.h; sourceTree = ""; }; + 845128991B0BB78C00CF9F2A /* SRMonthPicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SRMonthPicker.m; sourceTree = ""; }; + 845128A11B0C4AB300CF9F2A /* Project_exp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Project_exp.h; sourceTree = ""; }; + 845128A21B0C4AB300CF9F2A /* Project_exp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Project_exp.m; sourceTree = ""; }; + 845128A41B0C51F500CF9F2A /* Education_exp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Education_exp.h; sourceTree = ""; }; + 845128A51B0C51F500CF9F2A /* Education_exp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Education_exp.m; sourceTree = ""; }; + 845128A71B0C59CC00CF9F2A /* work_exp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = work_exp.h; sourceTree = ""; }; + 845128A81B0C59CC00CF9F2A /* work_exp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = work_exp.m; sourceTree = ""; }; + 845128AA1B0CB62500CF9F2A /* jobcollect_cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jobcollect_cell.h; sourceTree = ""; }; + 845128AB1B0CB62500CF9F2A /* jobcollect_cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = jobcollect_cell.m; sourceTree = ""; }; + 845311571AFDE4CA005FEE81 /* position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = position.h; sourceTree = ""; }; + 845311581AFDE4CA005FEE81 /* position.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = position.m; sourceTree = ""; }; + 8453115B1AFDEB03005FEE81 /* MsgCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MsgCell.h; sourceTree = ""; }; + 8453115C1AFDEB03005FEE81 /* MsgCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MsgCell.m; sourceTree = ""; }; + 8453115E1AFDEB23005FEE81 /* MsgCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MsgCell.xib; sourceTree = ""; }; + 845311681AFDEEF7005FEE81 /* AllMsg.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AllMsg.xib; sourceTree = ""; }; + 8453116A1AFDF05B005FEE81 /* AllMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllMsg.h; sourceTree = ""; }; + 8453116B1AFDF05B005FEE81 /* AllMsg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AllMsg.m; sourceTree = ""; }; + 8453116D1AFDFAFB005FEE81 /* lookMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lookMsg.h; sourceTree = ""; }; + 8453116E1AFDFAFB005FEE81 /* lookMsg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = lookMsg.m; sourceTree = ""; }; + 845311701AFDFB59005FEE81 /* lookMsg.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = lookMsg.xib; sourceTree = ""; }; + 845311721AFDFBBA005FEE81 /* InteMsg.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = InteMsg.xib; sourceTree = ""; }; + 845311741AFDFBDC005FEE81 /* InteMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InteMsg.h; sourceTree = ""; }; + 845311751AFDFBDC005FEE81 /* InteMsg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InteMsg.m; sourceTree = ""; }; + 845311771AFDFC27005FEE81 /* RefuseMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefuseMsg.h; sourceTree = ""; }; + 845311781AFDFC27005FEE81 /* RefuseMsg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RefuseMsg.m; sourceTree = ""; }; + 8453117A1AFDFCBB005FEE81 /* RefuseMsg.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RefuseMsg.xib; sourceTree = ""; }; + 8453117C1AFE18E1005FEE81 /* com.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = com.h; sourceTree = ""; }; + 8453117D1AFE18E1005FEE81 /* com.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = com.m; sourceTree = ""; }; + 845311821AFE1F0D005FEE81 /* FixCom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FixCom.h; sourceTree = ""; }; + 845311831AFE1F0D005FEE81 /* FixCom.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FixCom.m; sourceTree = ""; }; + 8464F4791AFA4D1700F038A0 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + 8464F47A1AFA4D1700F038A0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 8464F47B1AFA4D1700F038A0 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 846E596E1AFC88C200AAB57B /* JobCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobCell.h; sourceTree = ""; }; + 846E596F1AFC88C200AAB57B /* JobCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobCell.m; sourceTree = ""; }; + 846E59771AFCA81900AAB57B /* Job.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Job.xib; sourceTree = ""; }; + 846E597B1AFCA8D600AAB57B /* JobTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobTable.h; sourceTree = ""; }; + 846E597C1AFCA8D600AAB57B /* JobTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobTable.m; sourceTree = ""; }; + 846E597F1AFCFF0B00AAB57B /* TESTTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TESTTableViewController.h; sourceTree = ""; }; + 846E59801AFCFF0B00AAB57B /* TESTTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TESTTableViewController.m; sourceTree = ""; }; + 846E8F0B1B0445C400A02A35 /* Fill_Record.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fill_Record.h; sourceTree = ""; }; + 846E8F0C1B0445C400A02A35 /* Fill_Record.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Fill_Record.m; sourceTree = ""; }; + 846E8F0E1B0445E100A02A35 /* Fill_Record_Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fill_Record_Cell.h; sourceTree = ""; }; + 846E8F0F1B0445E100A02A35 /* Fill_Record_Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Fill_Record_Cell.m; sourceTree = ""; }; + 846E8F111B045F1600A02A35 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + 846E8F161B04FD8900A02A35 /* Job_Subscribe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Job_Subscribe.h; sourceTree = ""; }; + 846E8F171B04FD8900A02A35 /* Job_Subscribe.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Job_Subscribe.m; sourceTree = ""; }; + 846E8F1C1B0508FB00A02A35 /* Job_Sub_Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Job_Sub_Cell.h; sourceTree = ""; }; + 846E8F1D1B0508FB00A02A35 /* Job_Sub_Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Job_Sub_Cell.m; sourceTree = ""; }; + 848D8CDD1AFBCCB800D808C9 /* Register.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Register.h; sourceTree = ""; }; + 848D8CDE1AFBCCB800D808C9 /* Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Register.m; sourceTree = ""; }; + 848D8CE11AFBCD2700D808C9 /* Jobdetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Jobdetail.h; sourceTree = ""; }; + 848D8CE21AFBCD2700D808C9 /* Jobdetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Jobdetail.m; sourceTree = ""; }; + 848D8CE41AFBCD4400D808C9 /* CompanyPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompanyPosition.h; sourceTree = ""; }; + 848D8CE51AFBCD4400D808C9 /* CompanyPosition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CompanyPosition.m; sourceTree = ""; }; + 848D8CEA1AFBCDFC00D808C9 /* MsgDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MsgDetail.h; sourceTree = ""; }; + 848D8CEB1AFBCDFC00D808C9 /* MsgDetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MsgDetail.m; sourceTree = ""; }; + 848D8CEE1AFBCED000D808C9 /* Personinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Personinfo.h; sourceTree = ""; }; + 848D8CEF1AFBCED000D808C9 /* Personinfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Personinfo.m; sourceTree = ""; }; + 848D8CF71AFBCFBC00D808C9 /* Accountset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Accountset.h; sourceTree = ""; }; + 848D8CF81AFBCFBC00D808C9 /* Accountset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Accountset.m; sourceTree = ""; }; + 848D8CFB1AFBD00200D808C9 /* NewMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewMessage.h; sourceTree = ""; }; + 848D8CFC1AFBD00200D808C9 /* NewMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewMessage.m; sourceTree = ""; }; + 848D8CFF1AFBD04200D808C9 /* About.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = About.h; sourceTree = ""; }; + 848D8D001AFBD04200D808C9 /* About.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = About.m; sourceTree = ""; }; + 848D8D031AFBD08400D808C9 /* Rest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rest.h; sourceTree = ""; }; + 848D8D041AFBD08400D808C9 /* Rest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Rest.m; sourceTree = ""; }; + 848D8D071AFBD10100D808C9 /* JobInfoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobInfoa.h; sourceTree = ""; }; + 848D8D081AFBD10100D808C9 /* JobInfoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobInfoa.m; sourceTree = ""; }; + 848D8D0C1AFBD13C00D808C9 /* CompanyInfoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompanyInfoa.h; sourceTree = ""; }; + 848D8D0D1AFBD13C00D808C9 /* CompanyInfoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CompanyInfoa.m; sourceTree = ""; }; + 848D8D0F1AFBD14F00D808C9 /* JobCollect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobCollect.h; sourceTree = ""; }; + 848D8D101AFBD14F00D808C9 /* JobCollect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobCollect.m; sourceTree = ""; }; + 848DC74F1AF9AEDC0067A5F6 /* test1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test1.png; path = ../Resource/test1.png; sourceTree = ""; }; + 848DC7501AF9AEDC0067A5F6 /* test2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test2.png; path = ../Resource/test2.png; sourceTree = ""; }; + 848DC7511AF9AEDC0067A5F6 /* test3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test3.png; path = ../Resource/test3.png; sourceTree = ""; }; + 848DC7521AF9AEDC0067A5F6 /* test4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test4.png; path = ../Resource/test4.png; sourceTree = ""; }; + 848DC7531AF9AEDC0067A5F6 /* test5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test5.png; path = ../Resource/test5.png; sourceTree = ""; }; + 848DC7541AF9AEDC0067A5F6 /* test6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test6.png; path = ../Resource/test6.png; sourceTree = ""; }; + 848DC75F1AF9CAA00067A5F6 /* qq.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = qq.png; path = ../../ShiXiSeng/Resources/qq.png; sourceTree = ""; }; + 848DC7601AF9CAA00067A5F6 /* sina.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sina.png; path = ../../ShiXiSeng/Resources/sina.png; sourceTree = ""; }; + 848DC7611AF9CAA00067A5F6 /* wechat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = wechat.png; path = ../../ShiXiSeng/Resources/wechat.png; sourceTree = ""; }; + 848DC7651AF9D3520067A5F6 /* SignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignIn.h; sourceTree = ""; }; + 848DC7661AF9D3520067A5F6 /* SignIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignIn.m; sourceTree = ""; }; + 84AC8D231AF8B4B600892728 /* 嘀嗒清单.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "嘀嗒清单.png"; sourceTree = ""; }; + 84AC8D251AF8B95700892728 /* 中国科学院.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "中国科学院.png"; sourceTree = ""; }; + 84AC8D271AF8BBCF00892728 /* 京东.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "京东.png"; sourceTree = ""; }; + 84AC8D291AF8BBE300892728 /* 联想.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "联想.png"; sourceTree = ""; }; + 84AC8D2B1AF8BBEF00892728 /* 爱奇艺.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "爱奇艺.png"; sourceTree = ""; }; + 84AC8D2D1AF8BC0B00892728 /* 百词斩.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "百词斩.png"; sourceTree = ""; }; + 84AC8D321AF8BD9F00892728 /* >=.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ">=.png"; sourceTree = ""; }; + 84AC8D341AF8BE2C00892728 /* 定位.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "定位.png"; sourceTree = ""; }; + 84AC8D361AF8BEBF00892728 /* 日历.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "日历.png"; sourceTree = ""; }; + 84AC8D381AF8BF1500892728 /* Job.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Job.plist; sourceTree = ""; }; + 84AC8D3A1AF8C22300892728 /* Job.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Job.h; sourceTree = ""; }; + 84AC8D3B1AF8C22300892728 /* Job.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Job.m; sourceTree = ""; }; + 84B52D061AF68B4B000FF1B3 /* MViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MViewController.h; sourceTree = ""; }; + 84B52D071AF68B4B000FF1B3 /* MViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MViewController.m; sourceTree = ""; }; + 84B52D121AF6A658000FF1B3 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ShiXiSeng_Main/Images.xcassets; sourceTree = ""; }; 84EAF7711AF4C1AB001B6014 /* ShiXiSeng_Main.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShiXiSeng_Main.app; sourceTree = BUILT_PRODUCTS_DIR; }; 84EAF7751AF4C1AB001B6014 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 84EAF7761AF4C1AB001B6014 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; @@ -36,12 +362,89 @@ 84EAF77C1AF4C1AB001B6014 /* ShiXiSeng_Main.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = ShiXiSeng_Main.xcdatamodel; sourceTree = ""; }; 84EAF77E1AF4C1AB001B6014 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 84EAF77F1AF4C1AB001B6014 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 84EAF7821AF4C1AB001B6014 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 84EAF7841AF4C1AB001B6014 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 84EAF7871AF4C1AB001B6014 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 84EAF78D1AF4C1AB001B6014 /* ShiXiSeng_MainTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShiXiSeng_MainTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 84EAF7921AF4C1AB001B6014 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 84EAF7931AF4C1AB001B6014 /* ShiXiSeng_MainTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ShiXiSeng_MainTests.m; sourceTree = ""; }; + 84EAF7A11AF50670001B6014 /* MessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageViewController.h; sourceTree = ""; }; + 84EAF7A21AF50670001B6014 /* MessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageViewController.m; sourceTree = ""; }; + 84EB5CBB1AF7363500D10953 /* ExitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExitViewController.h; sourceTree = ""; }; + 84EB5CBC1AF7363500D10953 /* ExitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExitViewController.m; sourceTree = ""; }; + 84EB5CBF1AF7417D00D10953 /* PwdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PwdViewController.h; sourceTree = ""; }; + 84EB5CC01AF7417D00D10953 /* PwdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PwdViewController.m; sourceTree = ""; }; + 84EB5CC31AF7591F00D10953 /* FeedBackViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedBackViewController.h; sourceTree = ""; }; + 84EB5CC41AF7591F00D10953 /* FeedBackViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedBackViewController.m; sourceTree = ""; }; + 84ED3BB31AF78C53009A77FB /* SDCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCollectionViewCell.h; sourceTree = ""; }; + 84ED3BB41AF78C53009A77FB /* SDCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCollectionViewCell.m; sourceTree = ""; }; + 84ED3BB51AF78C53009A77FB /* SDCycleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCycleScrollView.h; sourceTree = ""; }; + 84ED3BB61AF78C53009A77FB /* SDCycleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCycleScrollView.m; sourceTree = ""; }; + 84ED3BB71AF78C53009A77FB /* UIView+SDExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDExtension.h"; sourceTree = ""; }; + 84ED3BB81AF78C53009A77FB /* UIView+SDExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDExtension.m"; sourceTree = ""; }; + 84ED3BBD1AF78C70009A77FB /* TAAbstractDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAbstractDotView.h; sourceTree = ""; }; + 84ED3BBE1AF78C70009A77FB /* TAAbstractDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAbstractDotView.m; sourceTree = ""; }; + 84ED3BBF1AF78C70009A77FB /* TAAnimatedDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAnimatedDotView.h; sourceTree = ""; }; + 84ED3BC01AF78C70009A77FB /* TAAnimatedDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAnimatedDotView.m; sourceTree = ""; }; + 84ED3BC11AF78C70009A77FB /* TADotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TADotView.h; sourceTree = ""; }; + 84ED3BC21AF78C70009A77FB /* TADotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TADotView.m; sourceTree = ""; }; + 84ED3BC31AF78C70009A77FB /* TAPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAPageControl.h; sourceTree = ""; }; + 84ED3BC41AF78C70009A77FB /* TAPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAPageControl.m; sourceTree = ""; }; + 84ED3BC91AF78C85009A77FB /* NSData+SDDataCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+SDDataCache.h"; sourceTree = ""; }; + 84ED3BCA1AF78C85009A77FB /* NSData+SDDataCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+SDDataCache.m"; sourceTree = ""; }; + 84ED3BCD1AF78FB9009A77FB /* ChanceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChanceViewController.h; sourceTree = ""; }; + 84ED3BCE1AF78FB9009A77FB /* ChanceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChanceViewController.m; sourceTree = ""; }; + 84ED3BD51AF792EC009A77FB /* PlayListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayListCell.h; sourceTree = ""; }; + 84ED3BD61AF792EC009A77FB /* PlayListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayListCell.m; sourceTree = ""; }; + 84ED3BD71AF792EC009A77FB /* PlayListCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlayListCell.xib; sourceTree = ""; }; + 84ED3BD81AF792EC009A77FB /* ArtistsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArtistsCell.h; sourceTree = ""; }; + 84ED3BD91AF792EC009A77FB /* ArtistsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArtistsCell.m; sourceTree = ""; }; + 84ED3BDA1AF792EC009A77FB /* ArtistsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ArtistsCell.xib; sourceTree = ""; }; + 84ED3BDF1AF79307009A77FB /* PlayListTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayListTableViewController.h; sourceTree = ""; }; + 84ED3BE01AF79307009A77FB /* PlayListTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayListTableViewController.m; sourceTree = ""; }; + 84ED3BE11AF79307009A77FB /* PlayListTableViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlayListTableViewController.xib; sourceTree = ""; }; + 84ED3BE21AF79307009A77FB /* ArtistsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArtistsViewController.h; sourceTree = ""; }; + 84ED3BE31AF79307009A77FB /* ArtistsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArtistsViewController.m; sourceTree = ""; }; + 84ED3BE41AF79307009A77FB /* ArtistsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ArtistsViewController.xib; sourceTree = ""; }; + 84ED3BE51AF79307009A77FB /* SampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleViewController.h; sourceTree = ""; }; + 84ED3BE61AF79307009A77FB /* SampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleViewController.m; sourceTree = ""; }; + 84ED3BE71AF79307009A77FB /* SampleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SampleViewController.xib; sourceTree = ""; }; + 84ED3BE81AF79307009A77FB /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; + 84ED3BE91AF79307009A77FB /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; + 84ED3BEA1AF79307009A77FB /* DetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DetailViewController.xib; sourceTree = ""; }; + 84ED3BF31AF7931A009A77FB /* YSLContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YSLContainerViewController.h; sourceTree = ""; }; + 84ED3BF41AF7931A009A77FB /* YSLContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YSLContainerViewController.m; sourceTree = ""; }; + 84ED3BF51AF7931A009A77FB /* YSLScrollMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YSLScrollMenuView.h; sourceTree = ""; }; + 84ED3BF61AF7931A009A77FB /* YSLScrollMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YSLScrollMenuView.m; sourceTree = ""; }; + 84ED3C0B1AF793EC009A77FB /* FindControllerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindControllerViewController.h; sourceTree = ""; }; + 84ED3C0C1AF793EC009A77FB /* FindControllerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FindControllerViewController.m; sourceTree = ""; }; + 84F1BBF81B034E1800B89DBD /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = "AFNetworking-master/AFNetworking/AFHTTPRequestOperation.h"; sourceTree = ""; }; + 84F1BBF91B034E1800B89DBD /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = "AFNetworking-master/AFNetworking/AFHTTPRequestOperation.m"; sourceTree = ""; }; + 84F1BBFA1B034E1800B89DBD /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = "AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.h"; sourceTree = ""; }; + 84F1BBFB1B034E1800B89DBD /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = "AFNetworking-master/AFNetworking/AFHTTPRequestOperationManager.m"; sourceTree = ""; }; + 84F1BBFC1B034E1800B89DBD /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = "AFNetworking-master/AFNetworking/AFHTTPSessionManager.h"; sourceTree = ""; }; + 84F1BBFD1B034E1800B89DBD /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = "AFNetworking-master/AFNetworking/AFHTTPSessionManager.m"; sourceTree = ""; }; + 84F1BBFE1B034E1800B89DBD /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = "AFNetworking-master/AFNetworking/AFNetworking.h"; sourceTree = ""; }; + 84F1BBFF1B034E1800B89DBD /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = "AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.h"; sourceTree = ""; }; + 84F1BC001B034E1800B89DBD /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = "AFNetworking-master/AFNetworking/AFNetworkReachabilityManager.m"; sourceTree = ""; }; + 84F1BC011B034E1800B89DBD /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = "AFNetworking-master/AFNetworking/AFSecurityPolicy.h"; sourceTree = ""; }; + 84F1BC021B034E1800B89DBD /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = "AFNetworking-master/AFNetworking/AFSecurityPolicy.m"; sourceTree = ""; }; + 84F1BC031B034E1800B89DBD /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = "AFNetworking-master/AFNetworking/AFURLConnectionOperation.h"; sourceTree = ""; }; + 84F1BC041B034E1800B89DBD /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = "AFNetworking-master/AFNetworking/AFURLConnectionOperation.m"; sourceTree = ""; }; + 84F1BC051B034E1800B89DBD /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = "AFNetworking-master/AFNetworking/AFURLRequestSerialization.h"; sourceTree = ""; }; + 84F1BC061B034E1800B89DBD /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = "AFNetworking-master/AFNetworking/AFURLRequestSerialization.m"; sourceTree = ""; }; + 84F1BC071B034E1800B89DBD /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = "AFNetworking-master/AFNetworking/AFURLResponseSerialization.h"; sourceTree = ""; }; + 84F1BC081B034E1800B89DBD /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = "AFNetworking-master/AFNetworking/AFURLResponseSerialization.m"; sourceTree = ""; }; + 84F1BC091B034E1800B89DBD /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = "AFNetworking-master/AFNetworking/AFURLSessionManager.h"; sourceTree = ""; }; + 84F1BC0A1B034E1800B89DBD /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = "AFNetworking-master/AFNetworking/AFURLSessionManager.m"; sourceTree = ""; }; + 84F1BC141B034F2C00B89DBD /* PooCodeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PooCodeView.h; sourceTree = ""; }; + 84F1BC151B034F2C00B89DBD /* PooCodeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PooCodeView.m; sourceTree = ""; }; + 84F1BC1A1B03705900B89DBD /* VPImageCropperViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VPImageCropperViewController.h; path = VPImageCropper/VPImageCropperViewController.h; sourceTree = ""; }; + 84F1BC1B1B03705900B89DBD /* VPImageCropperViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VPImageCropperViewController.m; path = VPImageCropper/VPImageCropperViewController.m; sourceTree = ""; }; + 84F1BC201B037BD000B89DBD /* DAContextMenuCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAContextMenuCell.h; path = DAContextMenuTableViewController/DAContextMenuCell.h; sourceTree = ""; }; + 84F1BC211B037BD000B89DBD /* DAContextMenuCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DAContextMenuCell.m; path = DAContextMenuTableViewController/DAContextMenuCell.m; sourceTree = ""; }; + 84F1BC221B037BD000B89DBD /* DAContextMenuTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAContextMenuTableViewController.h; path = DAContextMenuTableViewController/DAContextMenuTableViewController.h; sourceTree = ""; }; + 84F1BC231B037BD000B89DBD /* DAContextMenuTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DAContextMenuTableViewController.m; path = DAContextMenuTableViewController/DAContextMenuTableViewController.m; sourceTree = ""; }; + 84F1BC241B037BD000B89DBD /* DAOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAOverlayView.h; path = DAContextMenuTableViewController/DAOverlayView.h; sourceTree = ""; }; + 84F1BC251B037BD000B89DBD /* DAOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DAOverlayView.m; path = DAContextMenuTableViewController/DAOverlayView.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -49,6 +452,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 8464F47E1AFA4D1700F038A0 /* SystemConfiguration.framework in Frameworks */, + 8464F47F1AFA4D1700F038A0 /* Security.framework in Frameworks */, + 8464F47D1AFA4D1700F038A0 /* MobileCoreServices.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -62,12 +468,544 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 841068311AF7885A004E3A91 /* Images */ = { + isa = PBXGroup; + children = ( + 841068321AF78875004E3A91 /* image1.png */, + 841068331AF78875004E3A91 /* image0.png */, + 841068341AF78875004E3A91 /* image3.png */, + 841068351AF78875004E3A91 /* image2.png */, + ); + name = Images; + sourceTree = ""; + }; + 8410683A1AF7895A004E3A91 /* Find */ = { + isa = PBXGroup; + children = ( + 848D8CDB1AFBCC5200D808C9 /* FirstContent */, + ); + name = Find; + sourceTree = ""; + }; + 842B8DE41B0087D000A5A65B /* EAlntroView */ = { + isa = PBXGroup; + children = ( + 842B8DEC1B008CBA00A5A65B /* EAIntroPage.h */, + 842B8DED1B008CBA00A5A65B /* EAIntroPage.m */, + 842B8DEE1B008CBA00A5A65B /* EAIntroView.h */, + 842B8DEF1B008CBA00A5A65B /* EAIntroView.m */, + ); + name = EAlntroView; + sourceTree = ""; + }; + 8430AE911B0B23370054C032 /* Dialog */ = { + isa = PBXGroup; + children = ( + 845128941B0BB6B500CF9F2A /* Time */, + 8451288F1B0BB35D00CF9F2A /* school_exp.plist */, + 845128871B0BAC1C00CF9F2A /* work_time.plist */, + 845128751B0B6C4300CF9F2A /* industry_cell.h */, + 845128761B0B6C4300CF9F2A /* industry_cell.m */, + 845128771B0B6C4300CF9F2A /* industry.h */, + 845128781B0B6C4300CF9F2A /* industry.m */, + 845128791B0B6C4300CF9F2A /* industry.plist */, + 845128731B0B51DC00CF9F2A /* send_cycle.plist */, + 845128641B0B46BC00CF9F2A /* CollectionHeadView.h */, + 845128651B0B46BC00CF9F2A /* CollectionHeadView.m */, + 845128661B0B46BC00CF9F2A /* test.h */, + 845128671B0B46BC00CF9F2A /* test.m */, + 845128681B0B46BC00CF9F2A /* testcell.h */, + 845128801B0B9D9A00CF9F2A /* lowest_study.plist */, + 845128691B0B46BC00CF9F2A /* testcell.m */, + 845128561B0B465100CF9F2A /* ABCDEF_city.plist */, + 845128571B0B465100CF9F2A /* GHIJ_city.plist */, + 845128581B0B465100CF9F2A /* hot_city.plist */, + 845128591B0B465100CF9F2A /* KLMN_city.plist */, + 8451285A1B0B465100CF9F2A /* OPQR_city.plist */, + 8451285B1B0B465100CF9F2A /* STUV_city.plist */, + 8451285C1B0B465100CF9F2A /* WXYZ_city.plist */, + 845128321B0B3E7600CF9F2A /* DownSheet.h */, + 845128331B0B3E7600CF9F2A /* DownSheet.m */, + 845128341B0B3E7600CF9F2A /* DownSheetCell.h */, + 845128351B0B3E7600CF9F2A /* DownSheetCell.m */, + 845128361B0B3E7600CF9F2A /* job_first.plist */, + 845128371B0B3E7600CF9F2A /* job_second(0).plist */, + 845128381B0B3E7600CF9F2A /* job_second(1).plist */, + 845128391B0B3E7600CF9F2A /* job_second(2).plist */, + 8451283A1B0B3E7600CF9F2A /* job_second(3).plist */, + 8451283B1B0B3E7600CF9F2A /* job_second(4).plist */, + 8451283C1B0B3E7600CF9F2A /* job_second(5).plist */, + 8451283D1B0B3E7600CF9F2A /* job_second(6).plist */, + 8451283E1B0B3E7600CF9F2A /* job_second(7).plist */, + 8451283F1B0B3E7600CF9F2A /* job_second(8).plist */, + 845128401B0B3E7600CF9F2A /* job_second(9).plist */, + 845128411B0B3E7600CF9F2A /* job_second(10).plist */, + 845128421B0B3E7600CF9F2A /* job_third(0).plist */, + 845128431B0B3E7600CF9F2A /* job_third(1).plist */, + 845128441B0B3E7600CF9F2A /* job_third(2).plist */, + 845128231B0B3DE300CF9F2A /* salary_range.plist */, + 845128241B0B3DE300CF9F2A /* work_cell.h */, + 845128251B0B3DE300CF9F2A /* work_cell.m */, + 845128261B0B3DE300CF9F2A /* Work_Day.h */, + 845128271B0B3DE300CF9F2A /* Work_Day.m */, + 845128281B0B3DE300CF9F2A /* work_days.plist */, + 845128291B0B3DE300CF9F2A /* work_time.plist */, + ); + name = Dialog; + sourceTree = ""; + }; + 845128941B0BB6B500CF9F2A /* Time */ = { + isa = PBXGroup; + children = ( + 845128981B0BB78C00CF9F2A /* SRMonthPicker.h */, + 845128991B0BB78C00CF9F2A /* SRMonthPicker.m */, + ); + name = Time; + sourceTree = ""; + }; + 8453115A1AFDEAE4005FEE81 /* Cells */ = { + isa = PBXGroup; + children = ( + 8453115B1AFDEB03005FEE81 /* MsgCell.h */, + 8453115C1AFDEB03005FEE81 /* MsgCell.m */, + 8453115E1AFDEB23005FEE81 /* MsgCell.xib */, + ); + name = Cells; + sourceTree = ""; + }; + 845311601AFDEE1F005FEE81 /* Controllers */ = { + isa = PBXGroup; + children = ( + 845311641AFDEE69005FEE81 /* refuse */, + 845311631AFDEE5D005FEE81 /* interview */, + 845311621AFDEE37005FEE81 /* look */, + 845311611AFDEE2F005FEE81 /* all */, + ); + name = Controllers; + sourceTree = ""; + }; + 845311611AFDEE2F005FEE81 /* all */ = { + isa = PBXGroup; + children = ( + 845311681AFDEEF7005FEE81 /* AllMsg.xib */, + 8453116A1AFDF05B005FEE81 /* AllMsg.h */, + 8453116B1AFDF05B005FEE81 /* AllMsg.m */, + ); + name = all; + sourceTree = ""; + }; + 845311621AFDEE37005FEE81 /* look */ = { + isa = PBXGroup; + children = ( + 8453116D1AFDFAFB005FEE81 /* lookMsg.h */, + 8453116E1AFDFAFB005FEE81 /* lookMsg.m */, + 845311701AFDFB59005FEE81 /* lookMsg.xib */, + ); + name = look; + sourceTree = ""; + }; + 845311631AFDEE5D005FEE81 /* interview */ = { + isa = PBXGroup; + children = ( + 845311721AFDFBBA005FEE81 /* InteMsg.xib */, + 845311741AFDFBDC005FEE81 /* InteMsg.h */, + 845311751AFDFBDC005FEE81 /* InteMsg.m */, + ); + name = interview; + sourceTree = ""; + }; + 845311641AFDEE69005FEE81 /* refuse */ = { + isa = PBXGroup; + children = ( + 845311771AFDFC27005FEE81 /* RefuseMsg.h */, + 845311781AFDFC27005FEE81 /* RefuseMsg.m */, + 8453117A1AFDFCBB005FEE81 /* RefuseMsg.xib */, + ); + name = refuse; + sourceTree = ""; + }; + 845311851AFE3888005FEE81 /* CNPPopupController */ = { + isa = PBXGroup; + children = ( + 842065D31B010E0500C3B5AB /* CNPPopupController.m */, + 842065D21B010DF500C3B5AB /* CNPPopupController.h */, + ); + name = CNPPopupController; + sourceTree = ""; + }; + 8464F4561AFA4CA200F038A0 /* NetWork */ = { + isa = PBXGroup; + children = ( + 84F1BC181B03560E00B89DBD /* SHEmailValidator */, + 84F1BBF71B034E0400B89DBD /* AFNetworking */, + 8464F4781AFA4CFF00F038A0 /* Frameworks */, + ); + name = NetWork; + sourceTree = ""; + }; + 8464F4781AFA4CFF00F038A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8464F4791AFA4D1700F038A0 /* MobileCoreServices.framework */, + 8464F47A1AFA4D1700F038A0 /* SystemConfiguration.framework */, + 8464F47B1AFA4D1700F038A0 /* Security.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 846E59661AFC85DF00AAB57B /* viewController */ = { + isa = PBXGroup; + children = ( + 846E59771AFCA81900AAB57B /* Job.xib */, + 846E597B1AFCA8D600AAB57B /* JobTable.h */, + 846E597C1AFCA8D600AAB57B /* JobTable.m */, + ); + name = viewController; + sourceTree = ""; + }; + 846E596D1AFC888B00AAB57B /* Cells */ = { + isa = PBXGroup; + children = ( + 846E596E1AFC88C200AAB57B /* JobCell.h */, + 846E596F1AFC88C200AAB57B /* JobCell.m */, + ); + name = Cells; + sourceTree = ""; + }; + 846E597E1AFCF84000AAB57B /* Job */ = { + isa = PBXGroup; + children = ( + 846E59661AFC85DF00AAB57B /* viewController */, + 846E596D1AFC888B00AAB57B /* Cells */, + ); + name = Job; + sourceTree = ""; + }; + 848D8CD91AFBCB9F00D808C9 /* Sign&Resister */ = { + isa = PBXGroup; + children = ( + 848D8CDA1AFBCBCC00D808C9 /* Register */, + 848DC75B1AF9C9100067A5F6 /* Signin */, + ); + name = "Sign&Resister"; + sourceTree = ""; + }; + 848D8CDA1AFBCBCC00D808C9 /* Register */ = { + isa = PBXGroup; + children = ( + 84F1BC141B034F2C00B89DBD /* PooCodeView.h */, + 84F1BC151B034F2C00B89DBD /* PooCodeView.m */, + 848D8CDD1AFBCCB800D808C9 /* Register.h */, + 848D8CDE1AFBCCB800D808C9 /* Register.m */, + ); + name = Register; + sourceTree = ""; + }; + 848D8CDB1AFBCC5200D808C9 /* FirstContent */ = { + isa = PBXGroup; + children = ( + 84ED3C091AF793B4009A77FB /* FindController */, + 8410683B1AF78975004E3A91 /* FindViewController.h */, + 8410683C1AF78975004E3A91 /* FindViewController.m */, + ); + name = FirstContent; + sourceTree = ""; + }; + 848D8CDC1AFBCC6600D808C9 /* CompanyPosition */ = { + isa = PBXGroup; + children = ( + 848D8CE41AFBCD4400D808C9 /* CompanyPosition.h */, + 848D8CE51AFBCD4400D808C9 /* CompanyPosition.m */, + 845311571AFDE4CA005FEE81 /* position.h */, + 845311581AFDE4CA005FEE81 /* position.m */, + ); + name = CompanyPosition; + sourceTree = ""; + }; + 848D8CE01AFBCCC500D808C9 /* JobDetail */ = { + isa = PBXGroup; + children = ( + 848D8CE11AFBCD2700D808C9 /* Jobdetail.h */, + 848D8CE21AFBCD2700D808C9 /* Jobdetail.m */, + ); + name = JobDetail; + sourceTree = ""; + }; + 848D8CE71AFBCD6500D808C9 /* Home */ = { + isa = PBXGroup; + children = ( + 846E597E1AFCF84000AAB57B /* Job */, + 84AC8D3D1AF8C22A00892728 /* Model */, + 84AC8D221AF8B4A200892728 /* images */, + 84ED3BCD1AF78FB9009A77FB /* ChanceViewController.h */, + 84ED3BCE1AF78FB9009A77FB /* ChanceViewController.m */, + 846E597F1AFCFF0B00AAB57B /* TESTTableViewController.h */, + 846E59801AFCFF0B00AAB57B /* TESTTableViewController.m */, + ); + name = Home; + sourceTree = ""; + }; + 848D8CE81AFBCDC100D808C9 /* Main */ = { + isa = PBXGroup; + children = ( + 84EAF7A11AF50670001B6014 /* MessageViewController.h */, + 84EAF7A21AF50670001B6014 /* MessageViewController.m */, + ); + name = Main; + sourceTree = ""; + }; + 848D8CE91AFBCDD600D808C9 /* Detail */ = { + isa = PBXGroup; + children = ( + 848D8CEA1AFBCDFC00D808C9 /* MsgDetail.h */, + 848D8CEB1AFBCDFC00D808C9 /* MsgDetail.m */, + ); + name = Detail; + sourceTree = ""; + }; + 848D8CED1AFBCEA800D808C9 /* PersonInfo */ = { + isa = PBXGroup; + children = ( + 848D8CEE1AFBCED000D808C9 /* Personinfo.h */, + 848D8CEF1AFBCED000D808C9 /* Personinfo.m */, + ); + name = PersonInfo; + sourceTree = ""; + }; + 848D8CF11AFBCF0A00D808C9 /* Company */ = { + isa = PBXGroup; + children = ( + 8453117C1AFE18E1005FEE81 /* com.h */, + 8453117D1AFE18E1005FEE81 /* com.m */, + 845311821AFE1F0D005FEE81 /* FixCom.h */, + 845311831AFE1F0D005FEE81 /* FixCom.m */, + ); + name = Company; + sourceTree = ""; + }; + 848D8CF51AFBCF5500D808C9 /* Set */ = { + isa = PBXGroup; + children = ( + 848D8D021AFBD06D00D808C9 /* Rest */, + 84EB5CC21AF758CB00D10953 /* Feedback */, + 848D8CFE1AFBD02800D808C9 /* AboutSXS */, + 84EB5CBA1AF7360F00D10953 /* SystemSet */, + 848D8CFA1AFBCFE900D808C9 /* NewMsg */, + 848D8CF61AFBCF9700D808C9 /* AccountSet */, + 84EB5CBE1AF7412500D10953 /* Changepwd */, + ); + name = Set; + sourceTree = ""; + }; + 848D8CF61AFBCF9700D808C9 /* AccountSet */ = { + isa = PBXGroup; + children = ( + 848D8CF71AFBCFBC00D808C9 /* Accountset.h */, + 848D8CF81AFBCFBC00D808C9 /* Accountset.m */, + ); + name = AccountSet; + sourceTree = ""; + }; + 848D8CFA1AFBCFE900D808C9 /* NewMsg */ = { + isa = PBXGroup; + children = ( + 848D8CFB1AFBD00200D808C9 /* NewMessage.h */, + 848D8CFC1AFBD00200D808C9 /* NewMessage.m */, + ); + name = NewMsg; + sourceTree = ""; + }; + 848D8CFE1AFBD02800D808C9 /* AboutSXS */ = { + isa = PBXGroup; + children = ( + 848D8CFF1AFBD04200D808C9 /* About.h */, + 848D8D001AFBD04200D808C9 /* About.m */, + ); + name = AboutSXS; + sourceTree = ""; + }; + 848D8D021AFBD06D00D808C9 /* Rest */ = { + isa = PBXGroup; + children = ( + 848D8D031AFBD08400D808C9 /* Rest.h */, + 848D8D041AFBD08400D808C9 /* Rest.m */, + ); + name = Rest; + sourceTree = ""; + }; + 848D8D061AFBD0A200D808C9 /* JobCollect */ = { + isa = PBXGroup; + children = ( + 848D8D0B1AFBD10D00D808C9 /* JobInfo */, + 848D8D0A1AFBD10B00D808C9 /* Companyinfo */, + 848D8D0F1AFBD14F00D808C9 /* JobCollect.h */, + 848D8D101AFBD14F00D808C9 /* JobCollect.m */, + 845128AA1B0CB62500CF9F2A /* jobcollect_cell.h */, + 845128AB1B0CB62500CF9F2A /* jobcollect_cell.m */, + ); + name = JobCollect; + sourceTree = ""; + }; + 848D8D0A1AFBD10B00D808C9 /* Companyinfo */ = { + isa = PBXGroup; + children = ( + 848D8D0C1AFBD13C00D808C9 /* CompanyInfoa.h */, + 848D8D0D1AFBD13C00D808C9 /* CompanyInfoa.m */, + ); + name = Companyinfo; + sourceTree = ""; + }; + 848D8D0B1AFBD10D00D808C9 /* JobInfo */ = { + isa = PBXGroup; + children = ( + 848D8D071AFBD10100D808C9 /* JobInfoa.h */, + 848D8D081AFBD10100D808C9 /* JobInfoa.m */, + ); + name = JobInfo; + sourceTree = ""; + }; + 848D8D121AFBD19200D808C9 /* Record */ = { + isa = PBXGroup; + children = ( + 846E8F0B1B0445C400A02A35 /* Fill_Record.h */, + 846E8F0C1B0445C400A02A35 /* Fill_Record.m */, + 846E8F0E1B0445E100A02A35 /* Fill_Record_Cell.h */, + 846E8F0F1B0445E100A02A35 /* Fill_Record_Cell.m */, + 845128821B0BA40E00CF9F2A /* Hope.h */, + 845128831B0BA40E00CF9F2A /* Hope.m */, + 845128911B0BB3AC00CF9F2A /* School_exp.h */, + 845128921B0BB3AC00CF9F2A /* School_exp.m */, + 845128A11B0C4AB300CF9F2A /* Project_exp.h */, + 845128A21B0C4AB300CF9F2A /* Project_exp.m */, + 845128A41B0C51F500CF9F2A /* Education_exp.h */, + 845128A51B0C51F500CF9F2A /* Education_exp.m */, + 845128A71B0C59CC00CF9F2A /* work_exp.h */, + 845128A81B0C59CC00CF9F2A /* work_exp.m */, + ); + name = Record; + sourceTree = ""; + }; + 848D8D161AFBD20900D808C9 /* JobSubscribe */ = { + isa = PBXGroup; + children = ( + 846E8F161B04FD8900A02A35 /* Job_Subscribe.h */, + 846E8F171B04FD8900A02A35 /* Job_Subscribe.m */, + 846E8F1C1B0508FB00A02A35 /* Job_Sub_Cell.h */, + 846E8F1D1B0508FB00A02A35 /* Job_Sub_Cell.m */, + 845128701B0B518B00CF9F2A /* job_sub_content.h */, + 845128711B0B518B00CF9F2A /* job_sub_content.m */, + ); + name = JobSubscribe; + sourceTree = ""; + }; + 848DC75B1AF9C9100067A5F6 /* Signin */ = { + isa = PBXGroup; + children = ( + 848DC75C1AF9C91F0067A5F6 /* images */, + 848DC7651AF9D3520067A5F6 /* SignIn.h */, + 848DC7661AF9D3520067A5F6 /* SignIn.m */, + ); + name = Signin; + sourceTree = ""; + }; + 848DC75C1AF9C91F0067A5F6 /* images */ = { + isa = PBXGroup; + children = ( + 848DC75F1AF9CAA00067A5F6 /* qq.png */, + 848DC7601AF9CAA00067A5F6 /* sina.png */, + 848DC7611AF9CAA00067A5F6 /* wechat.png */, + ); + name = images; + sourceTree = ""; + }; + 84929B921AF51C8600BB26D8 /* ForeignClass */ = { + isa = PBXGroup; + children = ( + 84F1BC1F1B037BB400B89DBD /* DAContexMenuTableViewController */, + 84F1BC191B03703D00B89DBD /* VPImageCropper */, + 842B8DE41B0087D000A5A65B /* EAlntroView */, + 845311851AFE3888005FEE81 /* CNPPopupController */, + 84ED3BD01AF7926C009A77FB /* FIndTable */, + 84929B931AF51CB400BB26D8 /* Advertisement */, + ); + name = ForeignClass; + sourceTree = ""; + }; + 84929B931AF51CB400BB26D8 /* Advertisement */ = { + isa = PBXGroup; + children = ( + 84ED3BB21AF78C2F009A77FB /* SDCycleScrollView */, + 841068311AF7885A004E3A91 /* Images */, + ); + name = Advertisement; + sourceTree = ""; + }; + 84AC8D221AF8B4A200892728 /* images */ = { + isa = PBXGroup; + children = ( + 84AC8D361AF8BEBF00892728 /* 日历.png */, + 84AC8D341AF8BE2C00892728 /* 定位.png */, + 84AC8D321AF8BD9F00892728 /* >=.png */, + 84AC8D2F1AF8BD2F00892728 /* Company */, + ); + name = images; + sourceTree = ""; + }; + 84AC8D2F1AF8BD2F00892728 /* Company */ = { + isa = PBXGroup; + children = ( + 84AC8D2D1AF8BC0B00892728 /* 百词斩.png */, + 84AC8D2B1AF8BBEF00892728 /* 爱奇艺.png */, + 84AC8D291AF8BBE300892728 /* 联想.png */, + 84AC8D271AF8BBCF00892728 /* 京东.png */, + 84AC8D251AF8B95700892728 /* 中国科学院.png */, + 84AC8D231AF8B4B600892728 /* 嘀嗒清单.png */, + ); + name = Company; + sourceTree = ""; + }; + 84AC8D3D1AF8C22A00892728 /* Model */ = { + isa = PBXGroup; + children = ( + 84AC8D3A1AF8C22300892728 /* Job.h */, + 84AC8D3B1AF8C22300892728 /* Job.m */, + ); + name = Model; + sourceTree = ""; + }; + 84B52D011AF68518000FF1B3 /* Personal */ = { + isa = PBXGroup; + children = ( + 84B52D021AF68526000FF1B3 /* Home */, + ); + name = Personal; + sourceTree = ""; + }; + 84B52D021AF68526000FF1B3 /* Home */ = { + isa = PBXGroup; + children = ( + 848D8D161AFBD20900D808C9 /* JobSubscribe */, + 848D8D121AFBD19200D808C9 /* Record */, + 848D8D061AFBD0A200D808C9 /* JobCollect */, + 848D8CF51AFBCF5500D808C9 /* Set */, + 848D8CF11AFBCF0A00D808C9 /* Company */, + 848D8CED1AFBCEA800D808C9 /* PersonInfo */, + 84B52D061AF68B4B000FF1B3 /* MViewController.h */, + 84B52D071AF68B4B000FF1B3 /* MViewController.m */, + ); + name = Home; + sourceTree = ""; + }; 84EAF7681AF4C1AB001B6014 = { isa = PBXGroup; children = ( + 8430AE911B0B23370054C032 /* Dialog */, + 8464F4561AFA4CA200F038A0 /* NetWork */, + 84929B921AF51C8600BB26D8 /* ForeignClass */, 84EAF7731AF4C1AB001B6014 /* ShiXiSeng_Main */, 84EAF7901AF4C1AB001B6014 /* ShiXiSeng_MainTests */, 84EAF7721AF4C1AB001B6014 /* Products */, + 84B52D121AF6A658000FF1B3 /* Images.xcassets */, ); sourceTree = ""; }; @@ -83,15 +1021,22 @@ 84EAF7731AF4C1AB001B6014 /* ShiXiSeng_Main */ = { isa = PBXGroup; children = ( + 848D8CD91AFBCB9F00D808C9 /* Sign&Resister */, + 84ED3BCC1AF78F93009A77FB /* Chance */, + 84EAF7A01AF50655001B6014 /* Message */, + 8410683A1AF7895A004E3A91 /* Find */, + 84B52D011AF68518000FF1B3 /* Personal */, 84EAF7781AF4C1AB001B6014 /* AppDelegate.h */, + 846E8F111B045F1600A02A35 /* Main.storyboard */, 84EAF7791AF4C1AB001B6014 /* AppDelegate.m */, 84EAF77E1AF4C1AB001B6014 /* ViewController.h */, 84EAF77F1AF4C1AB001B6014 /* ViewController.m */, - 84EAF7811AF4C1AB001B6014 /* Main.storyboard */, - 84EAF7841AF4C1AB001B6014 /* Images.xcassets */, 84EAF7861AF4C1AB001B6014 /* LaunchScreen.xib */, 84EAF77B1AF4C1AB001B6014 /* ShiXiSeng_Main.xcdatamodeld */, + 84AC8D381AF8BF1500892728 /* Job.plist */, 84EAF7741AF4C1AB001B6014 /* Supporting Files */, + 8430AE8E1B0B07EC0054C032 /* CustomToolbar.h */, + 8430AE8F1B0B07EC0054C032 /* CustomToolbar.m */, ); path = ShiXiSeng_Main; sourceTree = ""; @@ -99,8 +1044,10 @@ 84EAF7741AF4C1AB001B6014 /* Supporting Files */ = { isa = PBXGroup; children = ( + 842B8DEB1B008C8E00A5A65B /* EAIntroView-Prefix.pch */, 84EAF7751AF4C1AB001B6014 /* Info.plist */, 84EAF7761AF4C1AB001B6014 /* main.m */, + 842B8DF21B008DF300A5A65B /* PrefixHeader.pch */, ); name = "Supporting Files"; sourceTree = ""; @@ -122,6 +1069,216 @@ name = "Supporting Files"; sourceTree = ""; }; + 84EAF7A01AF50655001B6014 /* Message */ = { + isa = PBXGroup; + children = ( + 845311601AFDEE1F005FEE81 /* Controllers */, + 8453115A1AFDEAE4005FEE81 /* Cells */, + 848D8CE91AFBCDD600D808C9 /* Detail */, + 848D8CE81AFBCDC100D808C9 /* Main */, + ); + name = Message; + sourceTree = ""; + }; + 84EB5CBA1AF7360F00D10953 /* SystemSet */ = { + isa = PBXGroup; + children = ( + 84EB5CBB1AF7363500D10953 /* ExitViewController.h */, + 84EB5CBC1AF7363500D10953 /* ExitViewController.m */, + ); + name = SystemSet; + sourceTree = ""; + }; + 84EB5CBE1AF7412500D10953 /* Changepwd */ = { + isa = PBXGroup; + children = ( + 84EB5CBF1AF7417D00D10953 /* PwdViewController.h */, + 84EB5CC01AF7417D00D10953 /* PwdViewController.m */, + ); + name = Changepwd; + sourceTree = ""; + }; + 84EB5CC21AF758CB00D10953 /* Feedback */ = { + isa = PBXGroup; + children = ( + 84EB5CC31AF7591F00D10953 /* FeedBackViewController.h */, + 84EB5CC41AF7591F00D10953 /* FeedBackViewController.m */, + ); + name = Feedback; + sourceTree = ""; + }; + 84ED3BB21AF78C2F009A77FB /* SDCycleScrollView */ = { + isa = PBXGroup; + children = ( + 84ED3BC91AF78C85009A77FB /* NSData+SDDataCache.h */, + 84ED3BCA1AF78C85009A77FB /* NSData+SDDataCache.m */, + 84ED3BBC1AF78C59009A77FB /* PageControl */, + 84ED3BB31AF78C53009A77FB /* SDCollectionViewCell.h */, + 84ED3BB41AF78C53009A77FB /* SDCollectionViewCell.m */, + 84ED3BB51AF78C53009A77FB /* SDCycleScrollView.h */, + 84ED3BB61AF78C53009A77FB /* SDCycleScrollView.m */, + 84ED3BB71AF78C53009A77FB /* UIView+SDExtension.h */, + 84ED3BB81AF78C53009A77FB /* UIView+SDExtension.m */, + ); + name = SDCycleScrollView; + sourceTree = ""; + }; + 84ED3BBC1AF78C59009A77FB /* PageControl */ = { + isa = PBXGroup; + children = ( + 84ED3BBD1AF78C70009A77FB /* TAAbstractDotView.h */, + 84ED3BBE1AF78C70009A77FB /* TAAbstractDotView.m */, + 84ED3BBF1AF78C70009A77FB /* TAAnimatedDotView.h */, + 84ED3BC01AF78C70009A77FB /* TAAnimatedDotView.m */, + 84ED3BC11AF78C70009A77FB /* TADotView.h */, + 84ED3BC21AF78C70009A77FB /* TADotView.m */, + 84ED3BC31AF78C70009A77FB /* TAPageControl.h */, + 84ED3BC41AF78C70009A77FB /* TAPageControl.m */, + ); + name = PageControl; + sourceTree = ""; + }; + 84ED3BCC1AF78F93009A77FB /* Chance */ = { + isa = PBXGroup; + children = ( + 848D8CE01AFBCCC500D808C9 /* JobDetail */, + 848D8CDC1AFBCC6600D808C9 /* CompanyPosition */, + 848D8CE71AFBCD6500D808C9 /* Home */, + ); + name = Chance; + sourceTree = ""; + }; + 84ED3BD01AF7926C009A77FB /* FIndTable */ = { + isa = PBXGroup; + children = ( + 84ED3BD41AF792DA009A77FB /* Cells */, + 84ED3BD31AF792CB009A77FB /* ViewControllers */, + 84ED3BD21AF792AA009A77FB /* YSLContainerViewController */, + 84ED3BD11AF7929B009A77FB /* Rescources */, + ); + name = FIndTable; + sourceTree = ""; + }; + 84ED3BD11AF7929B009A77FB /* Rescources */ = { + isa = PBXGroup; + children = ( + 848DC74F1AF9AEDC0067A5F6 /* test1.png */, + 848DC7501AF9AEDC0067A5F6 /* test2.png */, + 848DC7511AF9AEDC0067A5F6 /* test3.png */, + 848DC7521AF9AEDC0067A5F6 /* test4.png */, + 848DC7531AF9AEDC0067A5F6 /* test5.png */, + 848DC7541AF9AEDC0067A5F6 /* test6.png */, + ); + name = Rescources; + sourceTree = ""; + }; + 84ED3BD21AF792AA009A77FB /* YSLContainerViewController */ = { + isa = PBXGroup; + children = ( + 84ED3BF31AF7931A009A77FB /* YSLContainerViewController.h */, + 84ED3BF41AF7931A009A77FB /* YSLContainerViewController.m */, + 84ED3BF51AF7931A009A77FB /* YSLScrollMenuView.h */, + 84ED3BF61AF7931A009A77FB /* YSLScrollMenuView.m */, + ); + name = YSLContainerViewController; + sourceTree = ""; + }; + 84ED3BD31AF792CB009A77FB /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 84ED3BDF1AF79307009A77FB /* PlayListTableViewController.h */, + 84ED3BE01AF79307009A77FB /* PlayListTableViewController.m */, + 84ED3BE11AF79307009A77FB /* PlayListTableViewController.xib */, + 84ED3BE21AF79307009A77FB /* ArtistsViewController.h */, + 84ED3BE31AF79307009A77FB /* ArtistsViewController.m */, + 84ED3BE41AF79307009A77FB /* ArtistsViewController.xib */, + 84ED3BE51AF79307009A77FB /* SampleViewController.h */, + 84ED3BE61AF79307009A77FB /* SampleViewController.m */, + 84ED3BE71AF79307009A77FB /* SampleViewController.xib */, + 84ED3BE81AF79307009A77FB /* DetailViewController.h */, + 84ED3BE91AF79307009A77FB /* DetailViewController.m */, + 84ED3BEA1AF79307009A77FB /* DetailViewController.xib */, + ); + name = ViewControllers; + sourceTree = ""; + }; + 84ED3BD41AF792DA009A77FB /* Cells */ = { + isa = PBXGroup; + children = ( + 84ED3BD51AF792EC009A77FB /* PlayListCell.h */, + 84ED3BD61AF792EC009A77FB /* PlayListCell.m */, + 84ED3BD71AF792EC009A77FB /* PlayListCell.xib */, + 84ED3BD81AF792EC009A77FB /* ArtistsCell.h */, + 84ED3BD91AF792EC009A77FB /* ArtistsCell.m */, + 84ED3BDA1AF792EC009A77FB /* ArtistsCell.xib */, + ); + name = Cells; + sourceTree = ""; + }; + 84ED3C091AF793B4009A77FB /* FindController */ = { + isa = PBXGroup; + children = ( + 84ED3C0B1AF793EC009A77FB /* FindControllerViewController.h */, + 84ED3C0C1AF793EC009A77FB /* FindControllerViewController.m */, + ); + name = FindController; + sourceTree = ""; + }; + 84F1BBF71B034E0400B89DBD /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 84F1BBF81B034E1800B89DBD /* AFHTTPRequestOperation.h */, + 84F1BBF91B034E1800B89DBD /* AFHTTPRequestOperation.m */, + 84F1BBFA1B034E1800B89DBD /* AFHTTPRequestOperationManager.h */, + 84F1BBFB1B034E1800B89DBD /* AFHTTPRequestOperationManager.m */, + 84F1BBFC1B034E1800B89DBD /* AFHTTPSessionManager.h */, + 84F1BBFD1B034E1800B89DBD /* AFHTTPSessionManager.m */, + 84F1BBFE1B034E1800B89DBD /* AFNetworking.h */, + 84F1BBFF1B034E1800B89DBD /* AFNetworkReachabilityManager.h */, + 84F1BC001B034E1800B89DBD /* AFNetworkReachabilityManager.m */, + 84F1BC011B034E1800B89DBD /* AFSecurityPolicy.h */, + 84F1BC021B034E1800B89DBD /* AFSecurityPolicy.m */, + 84F1BC031B034E1800B89DBD /* AFURLConnectionOperation.h */, + 84F1BC041B034E1800B89DBD /* AFURLConnectionOperation.m */, + 84F1BC051B034E1800B89DBD /* AFURLRequestSerialization.h */, + 84F1BC061B034E1800B89DBD /* AFURLRequestSerialization.m */, + 84F1BC071B034E1800B89DBD /* AFURLResponseSerialization.h */, + 84F1BC081B034E1800B89DBD /* AFURLResponseSerialization.m */, + 84F1BC091B034E1800B89DBD /* AFURLSessionManager.h */, + 84F1BC0A1B034E1800B89DBD /* AFURLSessionManager.m */, + ); + name = AFNetworking; + sourceTree = ""; + }; + 84F1BC181B03560E00B89DBD /* SHEmailValidator */ = { + isa = PBXGroup; + children = ( + ); + name = SHEmailValidator; + sourceTree = ""; + }; + 84F1BC191B03703D00B89DBD /* VPImageCropper */ = { + isa = PBXGroup; + children = ( + 84F1BC1A1B03705900B89DBD /* VPImageCropperViewController.h */, + 84F1BC1B1B03705900B89DBD /* VPImageCropperViewController.m */, + ); + name = VPImageCropper; + sourceTree = ""; + }; + 84F1BC1F1B037BB400B89DBD /* DAContexMenuTableViewController */ = { + isa = PBXGroup; + children = ( + 84F1BC201B037BD000B89DBD /* DAContextMenuCell.h */, + 84F1BC211B037BD000B89DBD /* DAContextMenuCell.m */, + 84F1BC221B037BD000B89DBD /* DAContextMenuTableViewController.h */, + 84F1BC231B037BD000B89DBD /* DAContextMenuTableViewController.m */, + 84F1BC241B037BD000B89DBD /* DAOverlayView.h */, + 84F1BC251B037BD000B89DBD /* DAOverlayView.m */, + ); + name = DAContexMenuTableViewController; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -202,9 +1359,74 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 84EAF7831AF4C1AB001B6014 /* Main.storyboard in Resources */, + 84AC8D241AF8B4B600892728 /* 嘀嗒清单.png in Resources */, + 84ED3BF21AF79307009A77FB /* DetailViewController.xib in Resources */, + 8453115F1AFDEB23005FEE81 /* MsgCell.xib in Resources */, + 845128741B0B51DC00CF9F2A /* send_cycle.plist in Resources */, + 84ED3BEE1AF79307009A77FB /* ArtistsViewController.xib in Resources */, + 84AC8D2C1AF8BBEF00892728 /* 爱奇艺.png in Resources */, + 84AC8D261AF8B95700892728 /* 中国科学院.png in Resources */, + 848DC7631AF9CAA00067A5F6 /* sina.png in Resources */, + 845128601B0B465100CF9F2A /* KLMN_city.plist in Resources */, + 84ED3BEC1AF79307009A77FB /* PlayListTableViewController.xib in Resources */, + 8453117B1AFDFCBB005FEE81 /* RefuseMsg.xib in Resources */, + 845128511B0B3E7600CF9F2A /* job_second(9).plist in Resources */, + 84AC8D371AF8BEBF00892728 /* 日历.png in Resources */, + 8451284E1B0B3E7600CF9F2A /* job_second(6).plist in Resources */, + 841068361AF78875004E3A91 /* image1.png in Resources */, + 84ED3BDE1AF792EC009A77FB /* ArtistsCell.xib in Resources */, + 8451284C1B0B3E7600CF9F2A /* job_second(4).plist in Resources */, + 845128301B0B3DE300CF9F2A /* work_time.plist in Resources */, + 845128881B0BAC1C00CF9F2A /* work_time.plist in Resources */, + 845128471B0B3E7600CF9F2A /* job_first.plist in Resources */, + 8451285E1B0B465100CF9F2A /* GHIJ_city.plist in Resources */, + 84AC8D331AF8BD9F00892728 /* >=.png in Resources */, + 845128531B0B3E7600CF9F2A /* job_third(0).plist in Resources */, + 845128501B0B3E7600CF9F2A /* job_second(8).plist in Resources */, + 841068391AF78875004E3A91 /* image2.png in Resources */, + 846E59781AFCA81900AAB57B /* Job.xib in Resources */, + 848DC7571AF9AEDC0067A5F6 /* test3.png in Resources */, + 8451284A1B0B3E7600CF9F2A /* job_second(2).plist in Resources */, + 84ED3BDC1AF792EC009A77FB /* PlayListCell.xib in Resources */, + 845128811B0B9D9A00CF9F2A /* lowest_study.plist in Resources */, + 845128611B0B465100CF9F2A /* OPQR_city.plist in Resources */, + 846E8F121B045F1600A02A35 /* Main.storyboard in Resources */, + 8451284B1B0B3E7600CF9F2A /* job_second(3).plist in Resources */, + 84AC8D2A1AF8BBE300892728 /* 联想.png in Resources */, + 845128901B0BB35D00CF9F2A /* school_exp.plist in Resources */, + 8451285F1B0B465100CF9F2A /* hot_city.plist in Resources */, + 845128481B0B3E7600CF9F2A /* job_second(0).plist in Resources */, + 845128521B0B3E7600CF9F2A /* job_second(10).plist in Resources */, + 8451284D1B0B3E7600CF9F2A /* job_second(5).plist in Resources */, + 845128621B0B465100CF9F2A /* STUV_city.plist in Resources */, + 845311711AFDFB59005FEE81 /* lookMsg.xib in Resources */, + 8451287C1B0B6C4300CF9F2A /* industry.plist in Resources */, + 848DC75A1AF9AEDC0067A5F6 /* test6.png in Resources */, + 84AC8D2E1AF8BC0B00892728 /* 百词斩.png in Resources */, + 848DC7621AF9CAA00067A5F6 /* qq.png in Resources */, + 84AC8D351AF8BE2C00892728 /* 定位.png in Resources */, + 845128551B0B3E7600CF9F2A /* job_third(2).plist in Resources */, + 84B52D131AF6A658000FF1B3 /* Images.xcassets in Resources */, + 845311691AFDEEF7005FEE81 /* AllMsg.xib in Resources */, + 848DC7581AF9AEDC0067A5F6 /* test4.png in Resources */, + 845128541B0B3E7600CF9F2A /* job_third(1).plist in Resources */, + 848DC7561AF9AEDC0067A5F6 /* test2.png in Resources */, + 8451282C1B0B3DE300CF9F2A /* salary_range.plist in Resources */, + 84AC8D281AF8BBCF00892728 /* 京东.png in Resources */, + 845128631B0B465100CF9F2A /* WXYZ_city.plist in Resources */, + 848DC7551AF9AEDC0067A5F6 /* test1.png in Resources */, + 848DC7591AF9AEDC0067A5F6 /* test5.png in Resources */, + 841068371AF78875004E3A91 /* image0.png in Resources */, + 848DC7641AF9CAA00067A5F6 /* wechat.png in Resources */, + 845311731AFDFBBA005FEE81 /* InteMsg.xib in Resources */, + 84AC8D391AF8BF1500892728 /* Job.plist in Resources */, + 8451282F1B0B3DE300CF9F2A /* work_days.plist in Resources */, + 8451284F1B0B3E7600CF9F2A /* job_second(7).plist in Resources */, + 841068381AF78875004E3A91 /* image3.png in Resources */, + 845128491B0B3E7600CF9F2A /* job_second(1).plist in Resources */, + 84ED3BF01AF79307009A77FB /* SampleViewController.xib in Resources */, 84EAF7881AF4C1AB001B6014 /* LaunchScreen.xib in Resources */, - 84EAF7851AF4C1AB001B6014 /* Images.xcassets in Resources */, + 8451285D1B0B465100CF9F2A /* ABCDEF_city.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -222,10 +1444,98 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 84ED3BEF1AF79307009A77FB /* SampleViewController.m in Sources */, + 846E59811AFCFF0B00AAB57B /* TESTTableViewController.m in Sources */, + 84ED3BF81AF7931A009A77FB /* YSLScrollMenuView.m in Sources */, + 84ED3C0D1AF793EC009A77FB /* FindControllerViewController.m in Sources */, + 8410683D1AF78975004E3A91 /* FindViewController.m in Sources */, + 8451287B1B0B6C4300CF9F2A /* industry.m in Sources */, + 8451286B1B0B46BC00CF9F2A /* test.m in Sources */, + 848D8CE31AFBCD2700D808C9 /* Jobdetail.m in Sources */, + 846E59701AFC88C200AAB57B /* JobCell.m in Sources */, + 848D8D011AFBD04200D808C9 /* About.m in Sources */, + 84F1BC0D1B034E1800B89DBD /* AFHTTPSessionManager.m in Sources */, + 84F1BC0E1B034E1800B89DBD /* AFNetworkReachabilityManager.m in Sources */, + 842B8DF01B008CBA00A5A65B /* EAIntroPage.m in Sources */, + 8451289A1B0BB78C00CF9F2A /* SRMonthPicker.m in Sources */, + 848D8D0E1AFBD13C00D808C9 /* CompanyInfoa.m in Sources */, + 84F1BC0B1B034E1800B89DBD /* AFHTTPRequestOperation.m in Sources */, + 845128A31B0C4AB300CF9F2A /* Project_exp.m in Sources */, + 845311841AFE1F0D005FEE81 /* FixCom.m in Sources */, + 84F1BC0C1B034E1800B89DBD /* AFHTTPRequestOperationManager.m in Sources */, + 84F1BC131B034E1800B89DBD /* AFURLSessionManager.m in Sources */, + 845128931B0BB3AC00CF9F2A /* School_exp.m in Sources */, + 84ED3BC51AF78C70009A77FB /* TAAbstractDotView.m in Sources */, + 84EB5CBD1AF7363500D10953 /* ExitViewController.m in Sources */, 84EAF77D1AF4C1AB001B6014 /* ShiXiSeng_Main.xcdatamodeld in Sources */, + 846E597D1AFCA8D600AAB57B /* JobTable.m in Sources */, + 84B52D081AF68B4B000FF1B3 /* MViewController.m in Sources */, + 845128A61B0C51F500CF9F2A /* Education_exp.m in Sources */, + 848D8CF91AFBCFBC00D808C9 /* Accountset.m in Sources */, + 845311761AFDFBDC005FEE81 /* InteMsg.m in Sources */, + 848D8D091AFBD10100D808C9 /* JobInfoa.m in Sources */, + 84ED3BDB1AF792EC009A77FB /* PlayListCell.m in Sources */, + 84F1BC121B034E1800B89DBD /* AFURLResponseSerialization.m in Sources */, + 846E8F1E1B0508FB00A02A35 /* Job_Sub_Cell.m in Sources */, + 845128721B0B518B00CF9F2A /* job_sub_content.m in Sources */, + 848DC7671AF9D3520067A5F6 /* SignIn.m in Sources */, + 8453115D1AFDEB03005FEE81 /* MsgCell.m in Sources */, + 8453116F1AFDFAFB005FEE81 /* lookMsg.m in Sources */, + 84ED3BDD1AF792EC009A77FB /* ArtistsCell.m in Sources */, + 8453116C1AFDF05B005FEE81 /* AllMsg.m in Sources */, + 846E8F101B0445E100A02A35 /* Fill_Record_Cell.m in Sources */, + 8451282E1B0B3DE300CF9F2A /* Work_Day.m in Sources */, + 84F1BC271B037BD000B89DBD /* DAContextMenuTableViewController.m in Sources */, + 842065D41B010E0500C3B5AB /* CNPPopupController.m in Sources */, + 84ED3BBA1AF78C53009A77FB /* SDCycleScrollView.m in Sources */, + 848D8CDF1AFBCCB800D808C9 /* Register.m in Sources */, + 8430AE901B0B07EC0054C032 /* CustomToolbar.m in Sources */, + 842B8DF11B008CBA00A5A65B /* EAIntroView.m in Sources */, + 84ED3BF11AF79307009A77FB /* DetailViewController.m in Sources */, + 8451282D1B0B3DE300CF9F2A /* work_cell.m in Sources */, + 8451286C1B0B46BC00CF9F2A /* testcell.m in Sources */, + 845128461B0B3E7600CF9F2A /* DownSheetCell.m in Sources */, + 84ED3BCF1AF78FB9009A77FB /* ChanceViewController.m in Sources */, + 84EAF7A31AF50670001B6014 /* MessageViewController.m in Sources */, + 84F1BC101B034E1800B89DBD /* AFURLConnectionOperation.m in Sources */, + 848D8CE61AFBCD4400D808C9 /* CompanyPosition.m in Sources */, + 84ED3BC61AF78C70009A77FB /* TAAnimatedDotView.m in Sources */, + 84ED3BBB1AF78C53009A77FB /* UIView+SDExtension.m in Sources */, + 848D8CFD1AFBD00200D808C9 /* NewMessage.m in Sources */, + 846E8F0D1B0445C400A02A35 /* Fill_Record.m in Sources */, + 84EB5CC11AF7417D00D10953 /* PwdViewController.m in Sources */, 84EAF77A1AF4C1AB001B6014 /* AppDelegate.m in Sources */, + 845311591AFDE4CA005FEE81 /* position.m in Sources */, + 84ED3BCB1AF78C85009A77FB /* NSData+SDDataCache.m in Sources */, 84EAF7801AF4C1AB001B6014 /* ViewController.m in Sources */, + 8451286A1B0B46BC00CF9F2A /* CollectionHeadView.m in Sources */, + 848D8D051AFBD08400D808C9 /* Rest.m in Sources */, + 84F1BC281B037BD000B89DBD /* DAOverlayView.m in Sources */, 84EAF7771AF4C1AB001B6014 /* main.m in Sources */, + 845128AC1B0CB62500CF9F2A /* jobcollect_cell.m in Sources */, + 84F1BC111B034E1800B89DBD /* AFURLRequestSerialization.m in Sources */, + 845128841B0BA40E00CF9F2A /* Hope.m in Sources */, + 84EB5CC51AF7591F00D10953 /* FeedBackViewController.m in Sources */, + 848D8CF01AFBCED000D808C9 /* Personinfo.m in Sources */, + 84ED3BED1AF79307009A77FB /* ArtistsViewController.m in Sources */, + 845128451B0B3E7600CF9F2A /* DownSheet.m in Sources */, + 846E8F181B04FD8900A02A35 /* Job_Subscribe.m in Sources */, + 84ED3BC71AF78C70009A77FB /* TADotView.m in Sources */, + 84F1BC261B037BD000B89DBD /* DAContextMenuCell.m in Sources */, + 845311791AFDFC27005FEE81 /* RefuseMsg.m in Sources */, + 84ED3BB91AF78C53009A77FB /* SDCollectionViewCell.m in Sources */, + 84ED3BC81AF78C70009A77FB /* TAPageControl.m in Sources */, + 845128A91B0C59CC00CF9F2A /* work_exp.m in Sources */, + 84ED3BF71AF7931A009A77FB /* YSLContainerViewController.m in Sources */, + 8451287A1B0B6C4300CF9F2A /* industry_cell.m in Sources */, + 84ED3BEB1AF79307009A77FB /* PlayListTableViewController.m in Sources */, + 848D8D111AFBD14F00D808C9 /* JobCollect.m in Sources */, + 84F1BC0F1B034E1800B89DBD /* AFSecurityPolicy.m in Sources */, + 84F1BC161B034F2C00B89DBD /* PooCodeView.m in Sources */, + 84F1BC1C1B03705900B89DBD /* VPImageCropperViewController.m in Sources */, + 848D8CEC1AFBCDFC00D808C9 /* MsgDetail.m in Sources */, + 84AC8D3C1AF8C22300892728 /* Job.m in Sources */, + 8453117E1AFE18E1005FEE81 /* com.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -248,14 +1558,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 84EAF7811AF4C1AB001B6014 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 84EAF7821AF4C1AB001B6014 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; 84EAF7861AF4C1AB001B6014 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; children = ( @@ -353,6 +1655,8 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Developer"; INFOPLIST_FILE = ShiXiSeng_Main/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -363,6 +1667,8 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Developer"; INFOPLIST_FILE = ShiXiSeng_Main/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -422,6 +1728,7 @@ 84EAF7991AF4C1AB001B6014 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 84EAF79A1AF4C1AB001B6014 /* Build configuration list for PBXNativeTarget "ShiXiSeng_MainTests" */ = { isa = XCConfigurationList; @@ -430,6 +1737,7 @@ 84EAF79C1AF4C1AB001B6014 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ diff --git a/ShiXiSeng_Main.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ShiXiSeng_Main.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..7656d5e --- /dev/null +++ b/ShiXiSeng_Main.xcodeproj/xcuserdata/luyan13956039509.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/>=.png b/ShiXiSeng_Main/>=.png new file mode 100644 index 0000000000000000000000000000000000000000..3e32ebaaaa90d9f4be0c672ad7451d0ef6d57d36 GIT binary patch literal 3031 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 + +@interface About : UIViewController + +@end diff --git a/ShiXiSeng_Main/About.m b/ShiXiSeng_Main/About.m new file mode 100644 index 0000000..ce45e90 --- /dev/null +++ b/ShiXiSeng_Main/About.m @@ -0,0 +1,37 @@ +// +// About.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "About.h" + +@interface About () + +@end + +@implementation About + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Accountset.h b/ShiXiSeng_Main/Accountset.h new file mode 100644 index 0000000..c367211 --- /dev/null +++ b/ShiXiSeng_Main/Accountset.h @@ -0,0 +1,13 @@ +// +// Accountset.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface Accountset : UIViewController + +@end diff --git a/ShiXiSeng_Main/Accountset.m b/ShiXiSeng_Main/Accountset.m new file mode 100644 index 0000000..f423afa --- /dev/null +++ b/ShiXiSeng_Main/Accountset.m @@ -0,0 +1,37 @@ +// +// Accountset.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Accountset.h" + +@interface Accountset () + +@end + +@implementation Accountset + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/AllMsg.h b/ShiXiSeng_Main/AllMsg.h new file mode 100644 index 0000000..693d7d5 --- /dev/null +++ b/ShiXiSeng_Main/AllMsg.h @@ -0,0 +1,13 @@ +// +// AllMsg.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface AllMsg : UITableViewController + +@end diff --git a/ShiXiSeng_Main/AllMsg.m b/ShiXiSeng_Main/AllMsg.m new file mode 100644 index 0000000..7383321 --- /dev/null +++ b/ShiXiSeng_Main/AllMsg.m @@ -0,0 +1,119 @@ +// +// AllMsg.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "AllMsg.h" +#import "MsgCell.h" + +@interface AllMsg () + +@end + +@implementation AllMsg + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; + [self.tableView registerNib:[UINib nibWithNibName:@"MsgCell" bundle:nil] forCellReuseIdentifier:@"MsgCell"]; + +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return 5; +} +// 设置每一行的内容 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"MsgCell"; + MsgCell *cell = (MsgCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + + cell.jobname.text = @"花旗银行CEO"; + cell.companyname.text = @"花旗银行"; + cell.suit.text = @"默认"; + + return cell; +} +// 为表格建立点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; + [self.navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"company"] animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/AllMsg.xib b/ShiXiSeng_Main/AllMsg.xib new file mode 100644 index 0000000..fa82719 --- /dev/null +++ b/ShiXiSeng_Main/AllMsg.xib @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/AppDelegate.m b/ShiXiSeng_Main/AppDelegate.m index 301159f..91ac031 100644 --- a/ShiXiSeng_Main/AppDelegate.m +++ b/ShiXiSeng_Main/AppDelegate.m @@ -8,15 +8,27 @@ #import "AppDelegate.h" -@interface AppDelegate () -@end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + //判断是否登陆,由登陆状态判断启动页面 + //获取UserDefault + NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; + NSString *name = [userDefault objectForKey:@"name"]; + //获取storyboard + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; + //如果用户未登陆则把根视图控制器改变成登陆视图控制器 + if (name == nil) + { + NSLog(@"%@",name); + id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; + self.window.rootViewController = view; + } // Override point for customization after application launch. + return YES; } diff --git a/ShiXiSeng_Main/Base.lproj/LaunchScreen.xib b/ShiXiSeng_Main/Base.lproj/LaunchScreen.xib index 7f5a7ce..3867bf8 100644 --- a/ShiXiSeng_Main/Base.lproj/LaunchScreen.xib +++ b/ShiXiSeng_Main/Base.lproj/LaunchScreen.xib @@ -1,41 +1,34 @@ - + - - + - + - - + + + - + - - - - - - + + + + + + - + + + + diff --git a/ShiXiSeng_Main/Base.lproj/Main.storyboard b/ShiXiSeng_Main/Base.lproj/Main.storyboard deleted file mode 100644 index f56d2f3..0000000 --- a/ShiXiSeng_Main/Base.lproj/Main.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ShiXiSeng_Main/ChanceViewController.h b/ShiXiSeng_Main/ChanceViewController.h new file mode 100644 index 0000000..0776df3 --- /dev/null +++ b/ShiXiSeng_Main/ChanceViewController.h @@ -0,0 +1,38 @@ +// +// ChanceViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import "DownSheet.h" + +@interface ChanceViewController : UIViewController { + CGFloat w ; + NSArray *MenuList; + NSArray *MenuList1; + NSArray *MenuList2; +} + +@property (strong, nonatomic) NSString *kind1; +@property (strong, nonatomic) NSString *kind2; + +@property(strong, nonatomic)UIBarButtonItem *job_kind; +@property(strong, nonatomic)UIBarButtonItem *location; +@property(strong, nonatomic)UIBarButtonItem *work_day; +@property(strong, nonatomic)UIBarButtonItem *salary_day; + +@property (strong, nonatomic) UIButton *button; + + +@property(nonatomic, strong)UISearchBar *searchBar; + +@property(nonatomic,strong)NSArray *job; + +@property(strong,nonatomic) IBOutlet UITableView *tableview; + + + +@end diff --git a/ShiXiSeng_Main/ChanceViewController.m b/ShiXiSeng_Main/ChanceViewController.m new file mode 100644 index 0000000..40f43b5 --- /dev/null +++ b/ShiXiSeng_Main/ChanceViewController.m @@ -0,0 +1,344 @@ +// +// ChanceViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "ChanceViewController.h" +#import "SDCycleScrollView.h" +#import "JobCell.h" +#import "JobTable.h" +#import "DownSheet.h" +#import "Work_Day.h" +#import "test.h" +#include "PlayListTableViewController.h" + +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + + + +@implementation ChanceViewController + +-(void)viewWillAppear:(BOOL)animated{ + [_work_day setTitle:@"每周实习天数"]; + [_salary_day setTitle:@"日薪(元)"]; + [_job_kind setTitle:@"职业类别"]; + [_location setTitle:@"地点"]; + [_tableview reloadData]; + NSLog(@"机会页表格已被刷新!!!"); + +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +// +//// 懒加载 +//-(NSArray *)job +//{ +// if (_job == nil) { +// NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"Job.plist" ofType:nil]; +// NSArray *arrayM=[NSArray arrayWithContentsOfFile:fullpath]; +// NSMutableArray *models=[NSMutableArray arrayWithCapacity:arrayM.count]; +// for (NSDictionary *dict in arrayM) { +// Job *job = [Job jobInfoWithDict:dict]; +// [models addObject:job]; +// } +// _job = [models copy]; +// } +// return _job; +//} + +- (void)viewDidLoad { + + /** + * 绑定本地数据(每周实习天数) + */ + // 读取本地资源文件保存数组 + NSString *fullpath1=[[NSBundle mainBundle]pathForResource:@"work_days.plist" ofType:nil]; + MenuList1 = [NSArray arrayWithContentsOfFile:fullpath1]; + _kind1 = @" 每周实习天数"; + /** + * 绑定本地数据(日薪) + */ + // 读取本地资源文件保存数组 + NSString *fullpath2=[[NSBundle mainBundle]pathForResource:@"salary_range.plist" ofType:nil]; + MenuList2 = [NSArray arrayWithContentsOfFile:fullpath2]; + _kind2 =@" 日薪范围"; + + + + + self.tableview.delegate = self; + self.tableview.dataSource = self; + w = ScreenWidth; + [super viewDidLoad]; + [_job_kind setTitle:@"职位类别▾"]; + [self advtisement]; + [self toolBar_Create]; + + // toolbar的边界线 + UILabel *lab1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 180, w, 1)]; + [lab1 setBackgroundColor:[UIColor lightGrayColor]]; + [lab1 setText:@""]; + [self.view addSubview:lab1]; + + // toolbar的边界线 + UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 215, w, 1)]; + [lab setBackgroundColor:[UIColor lightGrayColor]]; + [lab setText:@""]; + [self.view addSubview:lab]; + + _searchBar=[[UISearchBar alloc]initWithFrame:CGRectMake(0,216, w, 30)]; + _searchBar.showsCancelButton = YES; + [_searchBar setBarTintColor:[UIColor whiteColor]]; + // searchBar框框里的text + _searchBar.placeholder = @"请输入期望的实习岗位 或公司名 或城市"; + // _searchBar.delegate=self; + [self.view addSubview:_searchBar]; +// UISearchDisplayController *search=[[UISearchDisplayController alloc]initWithSearchBar:searchBar contentsController:self]; +// search.searchResultsDataSource=self;//---这里是重中之重,用来显示搜索结果的代理。这个必须有 +// search.searchResultsDelegate=self;//-----还有这个也是 +// search.delegate=self; + + + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"Job.plist" ofType:nil]; + self.job = [NSArray arrayWithContentsOfFile:fullpath]; + + + +} +-(void)didSelectIndex:(NSInteger)index city:(NSString*)city{ + + [_location setTitle:city]; + +} +-(void)didSelectIndex:(NSInteger)index days:(NSString*)days{ + + + + [_work_day setTitle:days]; + + +} +-(void)didSelectIndex:(NSInteger)index money:(NSString*)money{ + [_salary_day setTitle:money]; +} +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + + NSString *other = @"..."; + int length = [self textLength:text]; + NSLog(@"%d, %d",[self textLength:text], [self textLength:_job_kind.title]); + if (length <= 6) { + [_job_kind setTitle:text]; + }else{ + + [_job_kind setTitle:[[text substringWithRange:NSMakeRange(0, 5)] stringByAppendingString:other] ]; + } + + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + NSLog(@"test"); + + return 1; +} +- (int)textLength:(NSString *)text//计算字符串长度 +{ + float number = 0.0; + for (int index = 0; index < [text length]; index++) + { + NSString *character = [text substringWithRange:NSMakeRange(index, 1)]; + + if ([character lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) + { + number++; + } + else + { + number = number + 0.5; + } + } + return ceil(number); +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + + return self.job.count; +} +// 动态广告 +-(void)advtisement{ + // 采用本地图片实现 + NSArray *images = @[[UIImage imageNamed:@"image0.png"], + [UIImage imageNamed:@"image1.png"], + [UIImage imageNamed:@"image2.png"], + [UIImage imageNamed:@"image3.png"] + ]; + + + + // 本地加载 --- 创建不带标题的图片轮5器 + SDCycleScrollView *cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 60, w, 120) imagesGroup:images]; + cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentRight; + + [self.view addSubview:cycleScrollView]; + // --- 轮播时间间隔,默认1.0秒,可自定义 + +} +-(void)toolBar_Create{ + + // 添加一个UIToolBar + UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 180, w, 35)]; + toolBar.tintColor = [UIColor groupTableViewBackgroundColor]; // 设置颜色 + toolBar.barStyle = UIBarButtonItemStylePlain; // 设置样式 + toolBar.translucent = YES; // 设置为半透明的,但样式必须设置为UIBarStyleBlackTranslucent + toolBar.hidden = NO; // 隐藏toolBar + [self.view addSubview:toolBar]; + + + + // 添加到UIToolBar上面,并释放内存 +// [toolBar setItems:@[firstButton1, twoButton, threeButton, twoButton1, fourButton] animated:YES]; + + // 职位类别 item + _job_kind = [[UIBarButtonItem alloc] initWithTitle:@"职位类别▾" style:UIBarButtonItemStylePlain target:self action:@selector(doneKeyboard1)]; + _job_kind.tintColor = [UIColor blackColor]; + _job_kind.width = (w-6)/5; + NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"Heiti SC" size:12]}; + [_job_kind setTitleTextAttributes:attributes forState:UIControlStateNormal]; + + // 间距1 + UIBarButtonItem *space1 = [[UIBarButtonItem alloc] initWithTitle:@"⎮" style:UIBarButtonItemStylePlain target:nil action:nil]; + [space1 setTitleTextAttributes:attributes forState:UIControlStateNormal]; + space1.tintColor = [UIColor grayColor]; + space1.width = 2; + + // 地点 item + _location = [[UIBarButtonItem alloc] initWithTitle:@"地点▾" style:UIBarButtonItemStylePlain target:self action:@selector(doneKeyboard4)]; + _location.tintColor = [UIColor blackColor]; + _location.width = (w-6)/5-25; + [_location setTitleTextAttributes:attributes forState:UIControlStateNormal]; + + // 间距2 + UIBarButtonItem *space2 = [[UIBarButtonItem alloc] initWithTitle:@"⎮" style :UIBarButtonItemStylePlain target:nil action:nil]; + [space2 setTitleTextAttributes:attributes forState:UIControlStateNormal]; + space2.tintColor = [UIColor grayColor]; + space2.width = 2; + + // 每周实习天数 item + _work_day= [[UIBarButtonItem alloc] initWithTitle:@"每周实习天数▾" style:UIBarButtonItemStylePlain target:self action:@selector(doneKeyboard2)]; + _work_day.tintColor = [UIColor blackColor]; + _work_day.width = (w-6)/4; + [_work_day setTitleTextAttributes:attributes forState:UIControlStateNormal]; + + // 间距3 + UIBarButtonItem *space3 = [[UIBarButtonItem alloc] initWithTitle:@"⎮" style :UIBarButtonItemStylePlain target:nil action:nil]; + [space3 setTitleTextAttributes:attributes forState:UIControlStateNormal]; + space3.tintColor = [UIColor grayColor]; + space3.width = 2; + + // 日薪(元) item + _salary_day = [[UIBarButtonItem alloc] initWithTitle:@"日薪(元)▾" style:UIBarButtonItemStylePlain target:self action:@selector(doneKeyboard3)]; + _salary_day.tintColor = [UIColor blackColor]; + _salary_day.width = (w-6)/5; + [_salary_day setTitleTextAttributes:attributes forState:UIControlStateNormal]; + + + toolBar.items = [NSArray arrayWithObjects: _job_kind, space1, _location, space2, _work_day, space3,_salary_day, nil]; +} + + + +-(void)doneKeyboard1{ + [_job_kind setTitle:@"职位类别▾"]; + MenuList = [[NSArray alloc]init]; + DownSheet *sheet = [[DownSheet alloc]initWithlist:MenuList height:0]; + sheet.delegate = self; + [sheet showInView:self]; + +} + +-(void)doneKeyboard2{ + [_work_day setTitle:@"每周实习天数▾"]; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList1 height:ScreenHeight/3 kind:_kind1 flag:1]; + sheet.delegate = (id)self; + [sheet showInView:self]; +} +-(void)doneKeyboard3{ + [_salary_day setTitle:@"日薪(元)▾"]; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList2 height:ScreenHeight/3 kind:_kind2 flag:2]; + sheet.delegate = (id)self; + [sheet showInView:self]; +} +-(void)doneKeyboard4{ + [_location setTitle:@"地点▾"]; + test *sheet = [[test alloc]initWithlist:0]; + sheet.delegate = (id)self; + [sheet showInView:self]; +} +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + NSLog(@"dadsdas"); + return 60; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + JobCell *cell = [tableView dequeueReusableCellWithIdentifier:@"JOB"forIndexPath:indexPath]; + + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [self.job objectAtIndex:row]; + + // 本地绑定数据 + NSString *imagePath = [rowDict objectForKey:@"icon"]; + imagePath = [imagePath stringByAppendingString:@".png"]; + cell.companyIcon.image = [UIImage imageNamed:imagePath]; + + cell.date.text = [rowDict objectForKey:@"date"]; + cell.salary.text = [rowDict objectForKey:@"salary"]; + cell.workday.text = [rowDict objectForKey:@"workday"]; + cell.location.text = [rowDict objectForKey:@"location"]; + cell.companyName.text = [rowDict objectForKey:@"company"]; + cell.job.text = [rowDict objectForKey:@"job"]; + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + // Configure the cell... + + return cell; +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Classes/DownSheet.h b/ShiXiSeng_Main/Classes/DownSheet.h new file mode 100755 index 0000000..c5846b9 --- /dev/null +++ b/ShiXiSeng_Main/Classes/DownSheet.h @@ -0,0 +1,55 @@ +// +// DownSheet.h +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import +#import "DownSheetCell.h" +@protocol DownSheetDelegate +@optional + + +-(void)didSelectIndex:(NSInteger)index text:(NSString*)text; + +@end + +@interface DownSheet : UIView{ + /** + *  三级列表 + */ + NSArray *job_first; + NSArray *job_second; + NSArray *job_third; + + int flag; + @public NSString *job; + + UILabel *title; + UITableView *view; + UITableView *view_second; + UITableView *view_third; + + NSArray *listData; + NSArray *listData1; + NSInteger num; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height; +- (void)showInView:(UIViewController *)Sview; +@property(nonatomic,assign) id delegate; + +@property (strong, nonatomic) NSMutableArray *title_table; +@property (strong, nonatomic) NSMutableArray *title_table_1; +@property (strong, nonatomic) NSMutableArray *title_table_2; + +@property (strong, nonatomic) NSString *msg; + + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/ShiXiSeng_Main/Classes/DownSheet.m b/ShiXiSeng_Main/Classes/DownSheet.m new file mode 100755 index 0000000..49df834 --- /dev/null +++ b/ShiXiSeng_Main/Classes/DownSheet.m @@ -0,0 +1,378 @@ +// +// DownSheet.m +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import "DownSheet.h" + + +@implementation DownSheet + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height{ + + _title_table = [[NSMutableArray alloc] init]; + + + /** + * 绑定本地数据(第一级列表) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"job_first.plist" ofType:nil]; + job_first = [NSArray arrayWithContentsOfFile:fullpath]; + + NSLog(@"%@", job_first); + NSLog(@"一级列表本地数据已加载!"); + /** + * 绑定本地数据(第二级列表) + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_second(0).plist" ofType:nil]; + job_second = [NSArray arrayWithContentsOfFile:fullpath_0]; + + NSLog(@"%@", job_second); + NSLog(@"二级列表本地数据已加载!"); + + /** + * 绑定本地数据(第三级列表) + */ + NSString *fullpath_0_0=[[NSBundle mainBundle]pathForResource:@"job_third(0).plist" ofType:nil]; + job_third = [NSArray arrayWithContentsOfFile:fullpath_0_0]; + NSLog(@"%@", job_third); + NSLog(@"三级列表本地数据已加载"); + + num = 1; + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:@" 职业类别"]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + view = [[UITableView alloc]initWithFrame:CGRectMake(0, ScreenHeight, (2*ScreenWidth)/5, ScreenHeight/2) style:UITableViewStylePlain]; + view.scrollEnabled = YES; + view.dataSource = self; + view.delegate = self; + + view_second = [[UITableView alloc]initWithFrame:CGRectMake((2*ScreenWidth)/5, ScreenHeight, ScreenWidth/5, ScreenHeight/2) style:UITableViewStylePlain]; + view_second.scrollEnabled = YES; + view_second.dataSource = self; + view_second.delegate = self; + + view_third = [[UITableView alloc]initWithFrame:CGRectMake((3*ScreenWidth)/5, ScreenHeight, (2*ScreenWidth)/5, ScreenHeight/2) style:UITableViewStylePlain]; + view_third.scrollEnabled = YES; + view_third.dataSource = self; + view_third.delegate = self; + + [self addSubview:title]; + [self addSubview:view]; + [self addSubview:view_second]; + [self addSubview:view_third]; + [self animeData]; + + } + return self; +} + +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(view.frame.size.height)-40, title.frame.size.width, title.frame.size.height)]; + [view setFrame:CGRectMake(view.frame.origin.x, ScreenHeight-view.frame.size.height-40, view.frame.size.width, view.frame.size.height)]; + [view_second setFrame:CGRectMake(view_second.frame.origin.x, ScreenHeight-view_second.frame.size.height-40, view_second.frame.size.width, view_second.frame.size.height)]; + [view_third setFrame:CGRectMake(view_third.frame.origin.x,ScreenHeight-view_third.frame.size.height-40,view_third.frame.size.width, view_third.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [view setFrame:CGRectMake(0, ScreenHeight, (2*ScreenWidth)/5, 0)]; + [view_second setFrame:CGRectMake((2*ScreenWidth)/5, ScreenHeight, ScreenWidth/5, 0)]; + [view_third setFrame:CGRectMake((3*ScreenWidth)/5, ScreenHeight, (2*ScreenWidth)/5, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Return the number of rows in the section. + if (tableView == view) { + // _title_table = [[NSMutableArray alloc] init]; + return job_first.count; + + } + else if(tableView == view_second){ + + _title_table_1 = [[NSMutableArray alloc] init]; + return job_second.count; + } + else{ + _title_table_2 = [[NSMutableArray alloc] init]; + return job_third.count; + } + +} +/** + * 设置每一行数据 + * + * @param tableView <#tableView description#> + * @param indexPath <#indexPath description#> + * + * @return <#return value description#> + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + if (tableView == view) { + + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_first objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + [cell setcell:0.]; + if(cell==nil){ + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + [cell setcell:0.]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"first_kind"]; + [_title_table addObject:cell.InfoLabel.text]; + // Configure the cell... + return cell; + }else if(tableView == view_second){ + + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_second objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + [cell setcell:0.]; + if(cell==nil){ + [cell setcell:0.]; + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + cell.InfoLabel.text = [rowDict objectForKey:@"second_kind"]; + [_title_table_1 addObject:cell.InfoLabel.text]; + + // Configure the cell... + return cell; + + }else{ + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [job_third objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + DownSheetCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + [cell setcell:0.]; + if(cell==nil){ + [cell setcell:0.]; + cell = [[DownSheetCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"third_kind"]; + [_title_table_2 addObject:cell.InfoLabel.text]; + + + // Configure the cell... + return cell; + + } + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 40.; +} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + + + DownSheetCell * cell = (DownSheetCell *)[tableView cellForRowAtIndexPath:indexPath]; + NSLog(@"%@",cell.InfoLabel.text); + + + + + if (tableView == view) { + /** + * 二级菜单 + * + * @param 0 í + * + * @return <#return value description#> + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_second(0).plist" ofType:nil]; + NSString *fullpath_1=[[NSBundle mainBundle]pathForResource:@"job_second(1).plist" ofType:nil]; + NSString *fullpath_2=[[NSBundle mainBundle]pathForResource:@"job_second(2).plist" ofType:nil]; + NSString *fullpath_3=[[NSBundle mainBundle]pathForResource:@"job_second(3).plist" ofType:nil]; + NSString *fullpath_4=[[NSBundle mainBundle]pathForResource:@"job_second(4).plist" ofType:nil]; + NSString *fullpath_5=[[NSBundle mainBundle]pathForResource:@"job_second(5).plist" ofType:nil]; + NSString *fullpath_6=[[NSBundle mainBundle]pathForResource:@"job_second(6).plist" ofType:nil]; + NSString *fullpath_7=[[NSBundle mainBundle]pathForResource:@"job_second(7).plist" ofType:nil]; + NSString *fullpath_8=[[NSBundle mainBundle]pathForResource:@"job_second(8).plist" ofType:nil]; + NSString *fullpath_9=[[NSBundle mainBundle]pathForResource:@"job_second(9).plist" ofType:nil]; + NSString *fullpath_10=[[NSBundle mainBundle]pathForResource:@"job_second(10).plist" ofType:nil]; + _msg = [_title_table objectAtIndex:(indexPath.row)]; + num = indexPath.row; + switch (num) { + case 1: + job_second = [NSArray arrayWithContentsOfFile:fullpath_1]; + flag = 1; + break; + case 2: + job_second = [NSArray arrayWithContentsOfFile:fullpath_2]; + flag = 2; + break; + case 3: + job_second = [NSArray arrayWithContentsOfFile:fullpath_3]; + flag = 3; + break; + case 4: + job_second = [NSArray arrayWithContentsOfFile:fullpath_4]; + flag = 4; + break; + case 5: + job_second = [NSArray arrayWithContentsOfFile:fullpath_5]; + flag = 5; + break; + case 6: + job_second = [NSArray arrayWithContentsOfFile:fullpath_6]; + flag = 6; + break; + case 7: + job_second = [NSArray arrayWithContentsOfFile:fullpath_7]; + flag = 7; + break; + case 8: + job_second = [NSArray arrayWithContentsOfFile:fullpath_8]; + flag = 8; + break; + case 9: + job_second = [NSArray arrayWithContentsOfFile:fullpath_9]; + flag = 9; + break; + case 10: + job_second = [NSArray arrayWithContentsOfFile:fullpath_10]; + flag = 10; + break; + default: + job_second = [NSArray arrayWithContentsOfFile:fullpath_0]; + flag = 0; + break; + } + [view_second reloadData]; + + // [self tappedCancel]; + }else if(tableView == view_second){ + /** + * 三级菜单 + */ + NSString *fullpath_0=[[NSBundle mainBundle]pathForResource:@"job_third(0).plist" ofType:nil]; + NSString *fullpath_1=[[NSBundle mainBundle]pathForResource:@"job_third(1).plist" ofType:nil]; + NSString *fullpath_2=[[NSBundle mainBundle]pathForResource:@"job_third(2).plist" ofType:nil]; + + + NSLog(@"%@",[_title_table_1 objectAtIndex:(indexPath.row)]); + NSLog(@"Flag = %d", flag); + if (flag == 1) { + NSLog(@"%ld", (long)indexPath.row); + + switch (indexPath.row) { + case 0: + job_third = [NSArray arrayWithContentsOfFile:fullpath_1]; + break; + case 1: + job_third = [NSArray arrayWithContentsOfFile:fullpath_2]; + break; + default: + job_third = [NSArray arrayWithContentsOfFile:fullpath_0]; + _msg = [_title_table_1 objectAtIndex:(indexPath.row)]; + [self tappedCancel]; + break; + } + } + [view_third reloadData]; + }else{ + + NSLog(@"%@",[_title_table_2 objectAtIndex:(indexPath.row)]); + _msg = [_title_table_2 objectAtIndex:(indexPath.row)]; + [self tappedCancel]; + } + + + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: text:)]){ + [_delegate didSelectIndex:indexPath.row text:_msg]; + return; + } +} + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect +{ + // Drawing code +} +*/ + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/ShiXiSeng_Main/Classes/DownSheetCell.h b/ShiXiSeng_Main/Classes/DownSheetCell.h new file mode 100755 index 0000000..b1efbdd --- /dev/null +++ b/ShiXiSeng_Main/Classes/DownSheetCell.h @@ -0,0 +1,28 @@ +// +// DownSheetCell.h +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface DownSheetCell : UITableViewCell{ + + UIView *backgroundView; +} +@property (strong, nonatomic) UILabel *InfoLabel; + +-(void)setcell:(CGFloat)x; +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/ShiXiSeng_Main/Classes/DownSheetCell.m b/ShiXiSeng_Main/Classes/DownSheetCell.m new file mode 100755 index 0000000..2e84d93 --- /dev/null +++ b/ShiXiSeng_Main/Classes/DownSheetCell.m @@ -0,0 +1,58 @@ +// +// DownSheetCell.m +// audioWriting +// +// Created by wolf on 14-7-19. +// Copyright (c) 2014年 wangruiyy. All rights reserved. +// + +#import "DownSheetCell.h" + +@implementation DownSheetCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + + _InfoLabel = [[UILabel alloc]init]; + _InfoLabel.backgroundColor = [UIColor clearColor]; + _InfoLabel.font = [UIFont systemFontOfSize:12]; + // [self.contentView addSubview:leftView]; + [self.contentView addSubview:_InfoLabel]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + } + return self; +} + +-(void)setcell:(CGFloat)x{ + _InfoLabel.frame = CGRectMake(x, 0, 140, 40); +} + +-(void)layoutSubviews{ + [super layoutSubviews]; + + _InfoLabel.frame = CGRectMake(15, 0, 140, 40); +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + if(selected){ + _InfoLabel.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; + }else{ + self.backgroundColor = [UIColor whiteColor]; + + _InfoLabel.textColor = [UIColor blackColor]; + } + // Configure the view for the selected state +} + +@end + +// 版权属于原作者 +// http://code4app.com (cn) http://code4app.net (en) +// 发布代码于最专业的源码分享网站: Code4App.com diff --git a/ShiXiSeng_Main/Classes/job_first.plist b/ShiXiSeng_Main/Classes/job_first.plist new file mode 100644 index 0000000..a63f221 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_first.plist @@ -0,0 +1,50 @@ + + + + + + first_kind + 不限类别 + + + first_kind + IT/互联网/通信/电子 + + + first_kind + 产品/设计/运营/策划 + + + first_kind + 人事/行政/管理/外语 + + + first_kind + 市场/销售/商务/公关 + + + first_kind + 广告/媒体/艺术/编辑 + + + first_kind + 金融/教育/法务/咨询 + + + first_kind + 房产/建筑/土木/物流 + + + first_kind + 生物/医疗/餐饮/体育 + + + first_kind + NGO/环保/公益 + + + first_kind + 机械/重工/电气/材料 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(0).plist b/ShiXiSeng_Main/Classes/job_second(0).plist new file mode 100644 index 0000000..6876d07 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(0).plist @@ -0,0 +1,10 @@ + + + + + + second_kind + + + + diff --git a/ShiXiSeng_Main/Classes/job_second(1).plist b/ShiXiSeng_Main/Classes/job_second(1).plist new file mode 100644 index 0000000..61f09a9 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(1).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 软件 + + + second_kind + 硬件 + + + second_kind + 电子 + + + second_kind + 通信 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(10).plist b/ShiXiSeng_Main/Classes/job_second(10).plist new file mode 100644 index 0000000..37f2593 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(10).plist @@ -0,0 +1,18 @@ + + + + + + second_kind + 机械 + + + second_kind + 电气 + + + second_kind + 材料 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(2).plist b/ShiXiSeng_Main/Classes/job_second(2).plist new file mode 100644 index 0000000..54c3503 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(2).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 运营 + + + second_kind + 策划 + + + second_kind + 产品 + + + second_kind + 设计 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(3).plist b/ShiXiSeng_Main/Classes/job_second(3).plist new file mode 100644 index 0000000..ddc5060 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(3).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 人事 + + + second_kind + 行政 + + + second_kind + 管理 + + + second_kind + 外语 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(4).plist b/ShiXiSeng_Main/Classes/job_second(4).plist new file mode 100644 index 0000000..fcbded3 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(4).plist @@ -0,0 +1,26 @@ + + + + + + second_kind + 市场 + + + second_kind + 营销 + + + second_kind + 商务 + + + second_kind + 公关 + + + second_kind + 客服 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(5).plist b/ShiXiSeng_Main/Classes/job_second(5).plist new file mode 100644 index 0000000..57f42e4 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(5).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 广告 + + + second_kind + 艺术 + + + second_kind + 媒体 + + + second_kind + 编辑 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(6).plist b/ShiXiSeng_Main/Classes/job_second(6).plist new file mode 100644 index 0000000..fc6ccc1 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(6).plist @@ -0,0 +1,34 @@ + + + + + + second_kind + 财会 + + + second_kind + 银行 + + + second_kind + 投资 + + + second_kind + 法务 + + + second_kind + 咨询 + + + second_kind + 金融 + + + second_kind + 教育 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(7).plist b/ShiXiSeng_Main/Classes/job_second(7).plist new file mode 100644 index 0000000..d333d34 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(7).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 房产 + + + second_kind + 建筑 + + + second_kind + 物流 + + + second_kind + 土木 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(8).plist b/ShiXiSeng_Main/Classes/job_second(8).plist new file mode 100644 index 0000000..802bc9b --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(8).plist @@ -0,0 +1,22 @@ + + + + + + second_kind + 医疗 + + + second_kind + 体育 + + + second_kind + 生物 + + + second_kind + 餐饮 + + + diff --git a/ShiXiSeng_Main/Classes/job_second(9).plist b/ShiXiSeng_Main/Classes/job_second(9).plist new file mode 100644 index 0000000..9160e25 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_second(9).plist @@ -0,0 +1,14 @@ + + + + + + second_kind + NGO + + + second_kind + 环保 + + + diff --git a/ShiXiSeng_Main/Classes/job_third(0).plist b/ShiXiSeng_Main/Classes/job_third(0).plist new file mode 100644 index 0000000..b321d98 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_third(0).plist @@ -0,0 +1,10 @@ + + + + + + third_kind + + + + diff --git a/ShiXiSeng_Main/Classes/job_third(1).plist b/ShiXiSeng_Main/Classes/job_third(1).plist new file mode 100644 index 0000000..56d8af9 --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_third(1).plist @@ -0,0 +1,54 @@ + + + + + + third_kind + 前端 + + + third_kind + C/C++ + + + third_kind + Android + + + third_kind + PHP + + + third_kind + Hadoop + + + third_kind + C#.NET + + + third_kind + IOS + + + third_kind + Java + + + third_kind + 测试 + + + third_kind + python/Ruby/Perl/Node.js + + + third_kind + 数据挖掘 + + + third_kind + SEO + + + diff --git a/ShiXiSeng_Main/Classes/job_third(2).plist b/ShiXiSeng_Main/Classes/job_third(2).plist new file mode 100644 index 0000000..d65bcaa --- /dev/null +++ b/ShiXiSeng_Main/Classes/job_third(2).plist @@ -0,0 +1,18 @@ + + + + + + third_kind + 集成电路 + + + third_kind + 嵌入式 + + + third_kind + 通信 + + + diff --git a/ShiXiSeng_Main/CompanyInfoa.h b/ShiXiSeng_Main/CompanyInfoa.h new file mode 100644 index 0000000..a1d4a8c --- /dev/null +++ b/ShiXiSeng_Main/CompanyInfoa.h @@ -0,0 +1,13 @@ +// +// CompanyInfoa.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface CompanyInfoa : UIViewController + +@end diff --git a/ShiXiSeng_Main/CompanyInfoa.m b/ShiXiSeng_Main/CompanyInfoa.m new file mode 100644 index 0000000..156c402 --- /dev/null +++ b/ShiXiSeng_Main/CompanyInfoa.m @@ -0,0 +1,37 @@ +// +// CompanyInfoa.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "CompanyInfoa.h" + +@interface CompanyInfoa () + +@end + +@implementation CompanyInfoa + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/CompanyPosition.h b/ShiXiSeng_Main/CompanyPosition.h new file mode 100644 index 0000000..63c8340 --- /dev/null +++ b/ShiXiSeng_Main/CompanyPosition.h @@ -0,0 +1,18 @@ +// +// CompanyPosition.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface CompanyPosition : UIViewController + +@property (strong, nonatomic) IBOutlet UITableView *table; +@property (strong, nonatomic) IBOutlet UIButton *fix; + + + +@end diff --git a/ShiXiSeng_Main/CompanyPosition.m b/ShiXiSeng_Main/CompanyPosition.m new file mode 100644 index 0000000..7c237af --- /dev/null +++ b/ShiXiSeng_Main/CompanyPosition.m @@ -0,0 +1,102 @@ +// +// CompanyPosition.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "CompanyPosition.h" +#import "position.h" + + + +@implementation CompanyPosition + +-(void)viewwillAppear:(BOOL)animated{ + + [_table reloadData]; + NSLog(@"公司职位页表格已刷新"); + +} + +// 返回主页 +-(IBAction)back:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:true]; +} + +// 点击关注公司后的事件 +-(IBAction)pressFix:(id)sender{ + if([_fix.titleLabel.text isEqualToString:@"关注公司"]){ + + [_fix setTitle:@"已关注" forState:UIControlStateNormal]; + [_fix setTitleColor:[UIColor colorWithRed:18.0f/255.0f green:149.0f/255.0f blue:230.0f/255.0f alpha:1.0] forState:UIControlStateNormal]; + [_fix setBackgroundColor:[UIColor colorWithRed:222.0f/255.0f green:222.0f/255.0f blue:222.0f/255.0f alpha:1.0]]; + + } + else{ + [_fix setTitle:@"关注公司" forState:UIControlStateNormal]; + [_fix setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_fix setBackgroundColor:[UIColor colorWithRed:18.0f/255.0f green:149.0f/255.0f blue:230.0f/255.0f alpha:1.0]]; + } +} + +// 实现tableview中的delegate + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + NSLog(@"test"); + + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + //long int te = self.job.count; + //NSLog(@"%@", te); + return 10; +} + +// 为每一个单元格赋初值 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + position *cell = [tableView dequeueReusableCellWithIdentifier:@"POSITION"forIndexPath:indexPath]; + + cell.companyname.text = @"大客户销售代表"; + cell.workdays.text = @"4天"; + cell.date.text = @"03-20发布"; + cell.salary.text = @"¥100-200/天"; + + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + // Configure the cell... + + return cell; +} + + +- (void)viewDidLoad { + +// self.table.dataSource = self; +// self.table.delegate = self; + [super viewDidLoad]; + // Do any additional setup after loading the view. + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/CustomToolbar.h b/ShiXiSeng_Main/CustomToolbar.h new file mode 100644 index 0000000..b6de99f --- /dev/null +++ b/ShiXiSeng_Main/CustomToolbar.h @@ -0,0 +1,13 @@ +// +// CustomToolbar.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/19/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import + +@interface CustomToolbar : UIToolbar + +@end diff --git a/ShiXiSeng_Main/CustomToolbar.m b/ShiXiSeng_Main/CustomToolbar.m new file mode 100644 index 0000000..49a8357 --- /dev/null +++ b/ShiXiSeng_Main/CustomToolbar.m @@ -0,0 +1,23 @@ + +// +// CustomToolbar.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/19/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "CustomToolbar.h" + +@implementation CustomToolbar + + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/ShiXiSeng_Main/Delegate.h b/ShiXiSeng_Main/Delegate.h new file mode 100644 index 0000000..ef1b2ed --- /dev/null +++ b/ShiXiSeng_Main/Delegate.h @@ -0,0 +1,18 @@ +// +// Delegate.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + + +#import + +@class TestUsr; + +@protocol Delegate + +-(void)PassValue:(TestUsr *)value; + +@end diff --git a/ShiXiSeng_Main/Education_exp.h b/ShiXiSeng_Main/Education_exp.h new file mode 100644 index 0000000..56cfb89 --- /dev/null +++ b/ShiXiSeng_Main/Education_exp.h @@ -0,0 +1,24 @@ +// +// Education_exp.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "CNPPopupController.h" +#import "Work_Day.h" +@interface Education_exp : UITableViewController{ + NSArray *menu; +} + +@property (nonatomic, strong) IBOutlet UIButton *tim1; +@property (nonatomic, strong) IBOutlet UIButton *tim2; +@property (nonatomic, strong) IBOutlet UIButton *kind; + +@property (nonatomic, strong) NSString *kind1; + +@property int _flag_; + +@end diff --git a/ShiXiSeng_Main/Education_exp.m b/ShiXiSeng_Main/Education_exp.m new file mode 100644 index 0000000..d1a36cf --- /dev/null +++ b/ShiXiSeng_Main/Education_exp.m @@ -0,0 +1,97 @@ +// +// Education_exp.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Education_exp.h" + +@interface Education_exp () +@property (nonatomic, strong) CNPPopupController *popupController; +@end + +@implementation Education_exp +-(IBAction)pressstudy:(id)sender{ + [_kind setTitle:@"请选择学历" forState:UIControlStateNormal]; + /** + * 绑定本地数据(最低学历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath3=[[NSBundle mainBundle]pathForResource:@"lowest_study.plist" ofType:nil]; + menu = [NSArray arrayWithContentsOfFile:fullpath3]; + _kind1 = @" 最低学历"; + Work_Day *sheet = [[Work_Day alloc]initWithlist:menu height:ScreenHeight/3 kind:_kind1 flag:4]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(void)didSelectIndex:(NSInteger)index study:(NSString *)study{ + [_kind setTitle:study forState:UIControlStateNormal]; +} + +-(IBAction)presstim1:(id)sender{ + __flag_ = 3; + [_tim1 setTitle:@"入学时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +-(IBAction)presstim2:(id)sender{ + __flag_ = 9; + [_tim2 setTitle:@"毕业时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +-(void)didSelect:(NSString *)timestring{ + [_tim1 setTitle:timestring forState:UIControlStateNormal]; +} +-(void)didSelect2:(NSString *)timestring{ + [_tim2 setTitle:timestring forState:UIControlStateNormal]; +} +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 项目时间" flag:__flag_ buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +-(IBAction)save:(id)sender{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@" 保存成功!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/ExitViewController.h b/ShiXiSeng_Main/ExitViewController.h new file mode 100644 index 0000000..5fba3c5 --- /dev/null +++ b/ShiXiSeng_Main/ExitViewController.h @@ -0,0 +1,17 @@ +// +// ExitViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface ExitViewController : UITableViewController + +-(IBAction)pressleftbutton:(id)sender; + + + +@end diff --git a/ShiXiSeng_Main/ExitViewController.m b/ShiXiSeng_Main/ExitViewController.m new file mode 100644 index 0000000..d23a978 --- /dev/null +++ b/ShiXiSeng_Main/ExitViewController.m @@ -0,0 +1,58 @@ +// +// ExitViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "ExitViewController.h" + +@interface ExitViewController () + +@end + +@implementation ExitViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)tapLoginOut:(id)sender { + + + + //获取UserDefaults单例 + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + //移除UserDefaults中存储的用户信息 + [userDefaults removeObjectForKey:@"name"]; + [userDefaults removeObjectForKey:@"password"]; + [userDefaults synchronize]; + //获取storyboard + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; + //获取注销后要跳转的页面 + id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; + //模态展示出登陆页面 + [self presentViewController:view animated:YES completion:^{ + }]; +} +-(IBAction)pressleftbutton:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:true]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/FeedBackViewController.h b/ShiXiSeng_Main/FeedBackViewController.h new file mode 100644 index 0000000..8c00aa2 --- /dev/null +++ b/ShiXiSeng_Main/FeedBackViewController.h @@ -0,0 +1,16 @@ +// +// FeedBackViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface FeedBackViewController : UIViewController + +-(IBAction)pressleftbutton:(id)sender; + + +@end diff --git a/ShiXiSeng_Main/FeedBackViewController.m b/ShiXiSeng_Main/FeedBackViewController.m new file mode 100644 index 0000000..cf429a2 --- /dev/null +++ b/ShiXiSeng_Main/FeedBackViewController.m @@ -0,0 +1,41 @@ +// +// FeedBackViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "FeedBackViewController.h" + +@interface FeedBackViewController () + +@end + +@implementation FeedBackViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +-(IBAction)pressleftbutton:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:true]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Fill_Record.h b/ShiXiSeng_Main/Fill_Record.h new file mode 100644 index 0000000..4d82a79 --- /dev/null +++ b/ShiXiSeng_Main/Fill_Record.h @@ -0,0 +1,17 @@ +// +// Fill_Record.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import + +@interface Fill_Record : UITableViewController + +// 申明一个imageview +@property (strong, nonatomic) IBOutlet UIImageView *bg; +@property (strong, nonatomic) IBOutlet UITableView *table; + +@end diff --git a/ShiXiSeng_Main/Fill_Record.m b/ShiXiSeng_Main/Fill_Record.m new file mode 100644 index 0000000..dcdea18 --- /dev/null +++ b/ShiXiSeng_Main/Fill_Record.m @@ -0,0 +1,333 @@ +// +// Fill_Record.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Fill_Record.h" +#import "Fill_Record_Cell.h" + +@interface Fill_Record () + +@end + +@implementation Fill_Record + +-(void)viewWillAppear:(BOOL)animated{ + NSLog(@"个人简历页表格被刷新了!!!"); + [_table reloadData]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + +// Do any additional setup after loading the view. +// 画布的宽度 +// long int width = (self.view.bounds.size.width/2)-40; + + // 创建一个uibutton(用来设置个人基本资料) + UIButton *uibutton = [[UIButton alloc]initWithFrame:CGRectMake(10, 25, 70, 70)]; + [uibutton setTitle:@"Test" forState:UIControlStateDisabled]; + [uibutton setImage:[UIImage imageNamed:@"头像.png"] forState:UIControlStateNormal]; + + // 给uibutton添加一个点击事件引导用户进入下一页 + [uibutton addTarget:self action:@selector(Button2Method) forControlEvents:UIControlEventTouchUpInside]; + + + // 创建一个edit button(用来编辑个人基本资料) + UIButton *edit = [[UIButton alloc]initWithFrame:CGRectMake(280, 15, 90, 30)]; + [edit setTitle:@"编辑" forState:UIControlStateDisabled]; + [edit setTintColor:[UIColor whiteColor]]; + [edit setImage:[UIImage imageNamed:@"编辑"] forState:UIControlStateNormal]; + [edit setEnabled:YES]; + + // 给uibutton添加一个点击事件引导用户进入下一页 + [edit addTarget:self action:@selector(Button2Method) forControlEvents:UIControlEventTouchUpInside]; + + // 创建一个label设置名字(18号字体) + UILabel *Name = [[UILabel alloc]initWithFrame:CGRectMake(100, 15, 60, 20)]; + [Name setText:@"鲁炎"]; + [Name setTextAlignment:NSTextAlignmentCenter]; + [Name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]]; + [Name setTextColor:[UIColor whiteColor]]; + + // 创建一个label设置性别 + UILabel *sex = [[UILabel alloc]initWithFrame:CGRectMake(145, 16, 60, 20)]; + [sex setTextAlignment:NSTextAlignmentCenter]; + [sex setText:@"男"]; + [sex setTextColor:[UIColor whiteColor]]; + [sex setFont:[UIFont fontWithName:@"Helvetica" size:12]]; + + // 创建一个label设置学位 + UILabel *degree = [[UILabel alloc]initWithFrame:CGRectMake(175, 16, 60, 20)]; + [degree setTextAlignment:NSTextAlignmentCenter]; + [degree setText:@"本科"]; + [degree setTextColor:[UIColor whiteColor]]; + [degree setFont:[UIFont fontWithName:@"Helvetica" size:12]]; + + // 创建一个school图标 + UIButton *school_icon = [[UIButton alloc]initWithFrame:CGRectMake(103, 50, 30, 30)]; + + [school_icon setImage:[UIImage imageNamed:@"school"] forState:UIControlStateNormal]; + + // 创建一个label设置学校/专业 + UILabel *school = [[UILabel alloc]initWithFrame:CGRectMake(130, 55, 200, 20)]; + [school setTextAlignment:NSTextAlignmentLeft]; + [school setText:@"四川大学/软件学院"]; + [school setTextColor:[UIColor whiteColor]]; + [school setFont:[UIFont fontWithName:@"Helvetica" size:10]]; + + // 创建一个phone图标 + UIButton *phone_icon = [[UIButton alloc]initWithFrame:CGRectMake(103, 65, 30, 30)]; + + [phone_icon setImage:[UIImage imageNamed:@"phone"] forState:UIControlStateNormal]; + + // 创建一个label设置电话 + UILabel *phone = [[UILabel alloc]initWithFrame:CGRectMake(130, 71, 200, 20)]; + [phone setTextAlignment:NSTextAlignmentLeft]; + [phone setText:@"13980460618"]; + [phone setTextColor:[UIColor whiteColor]]; + [phone setFont:[UIFont fontWithName:@"Helvetica" size:10]]; + + // 创建一个email图标 + UIButton *email_icon = [[UIButton alloc]initWithFrame:CGRectMake(103, 80, 30, 30)]; + + [email_icon setImage:[UIImage imageNamed:@"email"] forState:UIControlStateNormal]; + + // 创建一个label设置邮箱 + UILabel *email = [[UILabel alloc]initWithFrame:CGRectMake(130, 85, 200, 20)]; + [email setTextAlignment:NSTextAlignmentLeft]; + [email setText:@"420391244@qq.com"]; + [email setTextColor:[UIColor whiteColor]]; + [email setFont:[UIFont fontWithName:@"Helvetica" size:10]]; + + // 依次给向背景图层里面加入button, name, Details + [self.bg addSubview:uibutton]; + [self.bg addSubview:edit]; + [self.bg addSubview:Name]; + [self.bg addSubview:sex]; + [self.bg addSubview:degree]; + [self.bg addSubview:school_icon]; + [self.bg addSubview:school]; + [self.bg addSubview:phone_icon]; + [self.bg addSubview:phone]; + [self.bg addSubview:email_icon]; + [self.bg addSubview:email]; + self.bg.userInteractionEnabled = YES; + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +// uibutton的点击事件(进入下一步) +-(void)Button2Method +{ + NSLog(@"This is Test for ClickButton!"); + [self performSegueWithIdentifier:@"edit" sender:self]; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + + // Return the number of rows in the section. + return 6; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + Fill_Record_Cell *cell = [tableView dequeueReusableCellWithIdentifier:@"kind" forIndexPath:indexPath]; + UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 40, self.view.frame.size.width-200, 30)]; + [btn setTitle:@"更多信息填写" forState:UIControlStateNormal]; + + [btn setTintColor:[UIColor whiteColor]]; + [btn setBackgroundColor:[UIColor colorWithRed:0.0/255 green:169.0/255 blue:224.0/255 alpha:1.0f]]; + switch (indexPath.row) { + case 0: + cell.detail.text = @""; + if ([cell.detail.text isEqualToString:@""]) { + cell.add.hidden = NO; + cell.edita.hidden = YES; + } + else{ + cell.add.hidden = YES; + cell.edita.hidden = NO; + } + cell.fill_kind.text = @"期望实习"; + [cell.add setTitle:@"添加期望实习" forState:UIControlStateNormal]; + [cell.add addTarget:self action:@selector(addbutton1) forControlEvents:UIControlEventTouchUpInside]; + [cell.edita addTarget:self action:@selector(addbutton1) forControlEvents:UIControlEventTouchUpInside]; + + break; + case 1: + cell.detail.text = @""; + if ([cell.detail.text isEqualToString:@""]) { + cell.add.hidden = NO; + cell.edita.hidden = YES; + } + else{ + cell.add.hidden = YES; + cell.edita.hidden = NO; + } + cell.fill_kind.text = @"教育经历"; + [cell.add setTitle:@"添加教育经历" forState:UIControlStateNormal]; + [cell.add addTarget:self action:@selector(addbutton2) forControlEvents:UIControlEventTouchUpInside]; + [cell.edita addTarget:self action:@selector(addbutton2) forControlEvents:UIControlEventTouchUpInside]; + + break; + + case 2: + cell.detail.text = @""; + if ([cell.detail.text isEqualToString:@""]) { + cell.add.hidden = NO; + cell.edita.hidden = YES; + } + else{ + cell.add.hidden = YES; + cell.edita.hidden = NO; + } + cell.fill_kind.text = @"项目经验"; + [cell.add setTitle:@"添加项目经验" forState:UIControlStateNormal]; + [cell.add addTarget:self action:@selector(addbutton3) forControlEvents:UIControlEventTouchUpInside]; + [cell.edita addTarget:self action:@selector(addbutton3) forControlEvents:UIControlEventTouchUpInside]; + + break; + case 3: + cell.detail.text = @""; + if ([cell.detail.text isEqualToString:@""]) { + cell.add.hidden = NO; + cell.edita.hidden = YES; + } + else{ + cell.add.hidden = YES; + cell.edita.hidden = NO; + } + cell.fill_kind.text = @"校园经历"; + [cell.add setTitle:@"添加校园经历" forState:UIControlStateNormal]; + [cell.add addTarget:self action:@selector(addbutton4) forControlEvents:UIControlEventTouchUpInside]; + [cell.edita addTarget:self action:@selector(addbutton4) forControlEvents:UIControlEventTouchUpInside]; + + break; + case 4: + cell.detail.text = @"jhkhkhkhk"; + if ([cell.detail.text isEqualToString:@""]) { + cell.add.hidden = NO; + cell.edita.hidden = YES; + } + else{ + cell.add.hidden = YES; + cell.edita.hidden = NO; + } + cell.fill_kind.text = @"实习经历"; + [cell.add setTitle:@"添加实习经历" forState:UIControlStateNormal]; + [cell.add addTarget:self action:@selector(addbutton6) forControlEvents:UIControlEventTouchUpInside]; + [cell.edita addTarget:self action:@selector(addbutton6) forControlEvents:UIControlEventTouchUpInside]; + + break; + case 5: + + cell.add.hidden = YES; + cell.add.hidden = YES; + cell.fill_kind.text = @"更多资料"; + cell.detail.text = @""; + [cell addSubview:btn]; + [btn addTarget:self action:@selector(remind) forControlEvents:UIControlEventTouchUpInside]; + break; + default: + break; + } + // Configure the cell... + + return cell; +} + +-(void)addbutton1{ + [self performSegueWithIdentifier:@"add_hope" sender:self]; +} +-(void)addbutton2{ + [self performSegueWithIdentifier:@"add_education" sender:self]; +} +-(void)addbutton3{ + [self performSegueWithIdentifier:@"add_project" sender:self]; +} +-(void)addbutton4{ + [self performSegueWithIdentifier:@"add_school" sender:self]; +} +-(void)addbutton5{ + [self performSegueWithIdentifier:@"add_skill" sender:self]; +} +-(void)addbutton6{ + [self performSegueWithIdentifier:@"add_experience" sender:self]; +} +-(void)remind{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提醒" message:@"更多资料请到网站上填写!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} +-(void)addbutton7{ + // 我的作品 + +} +-(void)addbutton8{ + [self performSegueWithIdentifier:@"add_descri" sender:self]; +} +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Fill_Record_Cell.h b/ShiXiSeng_Main/Fill_Record_Cell.h new file mode 100644 index 0000000..7967485 --- /dev/null +++ b/ShiXiSeng_Main/Fill_Record_Cell.h @@ -0,0 +1,20 @@ +// +// Fill_Record_Cell.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import + +@interface Fill_Record_Cell : UITableViewCell + +@property (strong, nonatomic) IBOutlet UILabel *fill_kind; +@property (strong, nonatomic) IBOutlet UIButton *add; +@property (strong, nonatomic) IBOutlet UIButton *edita; +@property (strong, nonatomic) IBOutlet UITextView *detail; + +-(IBAction)press:(id)sender; + +@end diff --git a/ShiXiSeng_Main/Fill_Record_Cell.m b/ShiXiSeng_Main/Fill_Record_Cell.m new file mode 100644 index 0000000..119327a --- /dev/null +++ b/ShiXiSeng_Main/Fill_Record_Cell.m @@ -0,0 +1,29 @@ +// +// Fill_Record_Cell.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Fill_Record_Cell.h" + +@implementation Fill_Record_Cell + +-(IBAction)press:(id)sender{ + +} + +- (void)awakeFromNib { + // Initialization code + + +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ShiXiSeng_Main/FindControllerViewController.h b/ShiXiSeng_Main/FindControllerViewController.h new file mode 100644 index 0000000..9797d51 --- /dev/null +++ b/ShiXiSeng_Main/FindControllerViewController.h @@ -0,0 +1,13 @@ +// +// FindControllerViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface FindControllerViewController : UIViewController + +@end diff --git a/ShiXiSeng_Main/FindControllerViewController.m b/ShiXiSeng_Main/FindControllerViewController.m new file mode 100644 index 0000000..70a7171 --- /dev/null +++ b/ShiXiSeng_Main/FindControllerViewController.m @@ -0,0 +1,78 @@ +// +// FindControllerViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "FindControllerViewController.h" +#import "YSLContainerViewController.h" +#import "PlayListTableViewController.h" +#import "ArtistsViewController.h" +#import "SampleViewController.h" + +@interface FindControllerViewController () + +@end + +@implementation FindControllerViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Do any additional setup after loading the view. + + // SetUp ViewControllers + PlayListTableViewController *playListVC = [[PlayListTableViewController alloc]initWithNibName:@"PlayListTableViewController" bundle:nil]; + playListVC.title = @"PlayList"; + + ArtistsViewController *artistVC = [[ArtistsViewController alloc]initWithNibName:@"ArtistsViewController" bundle:nil]; + artistVC.title = @"Artists"; + + SampleViewController *sampleVC1 = [[SampleViewController alloc]initWithNibName:@"SampleViewController" bundle:nil]; + sampleVC1.title = @"Album"; + + SampleViewController *sampleVC2 = [[SampleViewController alloc]initWithNibName:@"SampleViewController" bundle:nil]; + sampleVC2.title = @"Track"; + + SampleViewController *sampleVC3 = [[SampleViewController alloc]initWithNibName:@"SampleViewController" bundle:nil]; + sampleVC3.title = @"Setting"; + + // ContainerView + float statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; + float navigationHeight = self.navigationController.navigationBar.frame.size.height; + + YSLContainerViewController *containerVC = [[YSLContainerViewController alloc]initWithControllers:@[playListVC,artistVC,sampleVC1,sampleVC2,sampleVC3] + topBarHeight:statusHeight + navigationHeight + parentViewController:self]; + containerVC.delegate = self; + containerVC.menuItemFont = [UIFont fontWithName:@"Futura-Medium" size:16]; + + [self.view addSubview:containerVC.view]; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark -- YSLContainerViewControllerDelegate +- (void)containerViewItemIndex:(NSInteger)index currentController:(UIViewController *)controller +{ + // NSLog(@"current Index : %ld",(long)index); + // NSLog(@"current controller : %@",controller); + [controller viewWillAppear:YES]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/FindViewController.h b/ShiXiSeng_Main/FindViewController.h new file mode 100644 index 0000000..6409d73 --- /dev/null +++ b/ShiXiSeng_Main/FindViewController.h @@ -0,0 +1,15 @@ +// +// FindViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface FindViewController : UIViewController + +@property (strong,nonatomic)IBOutlet UIScrollView *uiview; + +@end diff --git a/ShiXiSeng_Main/FindViewController.m b/ShiXiSeng_Main/FindViewController.m new file mode 100644 index 0000000..0480900 --- /dev/null +++ b/ShiXiSeng_Main/FindViewController.m @@ -0,0 +1,108 @@ +// 发现主页实现代码 +// FindViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + + + +#import "FindViewController.h" +#import "SDCycleScrollView.h" +#import "YSLContainerViewController.h" +#import "PlayListTableViewController.h" +#import "ArtistsViewController.h" +#import "SampleViewController.h" +#import "JobTable.h" + +@interface FindViewController () +@property (strong,nonatomic)IBOutlet UIScrollView *scrollview; + +@end + +@implementation FindViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + + [self CylcleAdvertisement]; + [self ChangeTable]; + +} + +// 轮播图 +-(void)CylcleAdvertisement{ + // 采用本地图片实现 + NSArray *images = @[[UIImage imageNamed:@"image0.png"], + [UIImage imageNamed:@"image1.png"], + [UIImage imageNamed:@"image2.png"], + [UIImage imageNamed:@"image3.png"] + ]; + + CGFloat w = self.view.bounds.size.width; + + // 本地加载 --- 创建不带标题的图片轮5器 + SDCycleScrollView *cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 60, w, 120) imagesGroup:images]; + cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentRight; + //cycleScrollView.delegate = self; + + [self.view addSubview:cycleScrollView]; + // --- 轮播时间间隔,默认1.0秒,可自定义 +} +// 切换视图 +-(void)ChangeTable{ + // SetUp ViewControllers + PlayListTableViewController *playListVC = [[PlayListTableViewController alloc]initWithNibName:@"PlayListTableViewController" bundle:nil]; + playListVC.title = @"经验谈"; + + ArtistsViewController *artistVC = [[ArtistsViewController alloc]initWithNibName:@"ArtistsViewController" bundle:nil]; + artistVC.title = @"好文推"; + + SampleViewController *sampleVC1 = [[SampleViewController alloc]initWithNibName:@"SampleViewController" bundle:nil]; + sampleVC1.title = @"技巧论"; + + SampleViewController *sampleVC2 = [[SampleViewController alloc]initWithNibName:@"SampleViewController" bundle:nil]; + sampleVC2.title = @"八卦粥"; + + + + // ContainerView + float statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; + float navigationHeight = self.navigationController.navigationBar.frame.size.height; + + // 将写好的表格放进容器内 + YSLContainerViewController *containerVC = [[YSLContainerViewController alloc]initWithControllers:@[ playListVC, artistVC, sampleVC1, sampleVC2] + topBarHeight:statusHeight + navigationHeight + parentViewController:self]; + containerVC.delegate = self; + containerVC.menuItemFont = [UIFont fontWithName:@"Futura-Medium" size:16]; + + [self.scrollview addSubview:containerVC.view]; + +} +#pragma mark -- YSLContainerViewControllerDelegate +- (void)containerViewItemIndex:(NSInteger)index currentController:(UIViewController *)controller +{ + // NSLog(@"current Index : %ld",(long)index); + // NSLog(@"current controller : %@",controller); + [controller viewWillAppear:YES]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/FixCom.h b/ShiXiSeng_Main/FixCom.h new file mode 100644 index 0000000..ca356f2 --- /dev/null +++ b/ShiXiSeng_Main/FixCom.h @@ -0,0 +1,16 @@ +// +// FixCom.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import "DAContextMenuTableViewController.h" + +@interface FixCom : DAContextMenuTableViewController + +@property (strong, nonatomic) IBOutlet UITableView *table; + +@end diff --git a/ShiXiSeng_Main/FixCom.m b/ShiXiSeng_Main/FixCom.m new file mode 100644 index 0000000..d8357ee --- /dev/null +++ b/ShiXiSeng_Main/FixCom.m @@ -0,0 +1,171 @@ +// +// FixCom.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "FixCom.h" +#import "com.h" +#import "DAContextMenuCell.h" + +@interface FixCom () + +@property (assign, nonatomic) NSInteger rowsCount; + +@end + +@implementation FixCom + +-(IBAction)pop:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:YES]; +} + +-(void)viewWillAppear:(BOOL)animated{ + [_table reloadData]; + NSLog(@"关注公司页已经刷新!!!"); +} +- (void)viewDidLoad { + [super viewDidLoad]; + self.rowsCount = 100; + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +//表格的某单元格可编辑 +-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath +{ + return YES; +} +//表格的某单元格可移动 +-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath +{ + return YES; +} + +#pragma mark - Private + +- (void)setRowsCount:(NSInteger)rowsCount +{ + if (rowsCount < 0) { + _rowsCount = 0; + } else { + _rowsCount = rowsCount; + } +} + +#pragma mark * Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.rowsCount; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"COM"; + com *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + + if (indexPath.row == 1) { + cell.comIcon.image = [UIImage imageNamed:@"中国科学院.png"]; + cell.comName.text = @"中国科学院"; + cell.detail.text = @"互联网,电子商务/500-200人"; + } + else{ + cell.comIcon.image = [UIImage imageNamed:@"中国科学院.png"]; + + cell.comName.text = @"中国科学院"; + cell.detail.text = @"互联网,电子商务/500-200人"; + } + + return cell; + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +#pragma mark * DAContextMenuCell delegate + +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell +{ + [super contextMenuCellDidSelectDeleteOption:cell]; + self.rowsCount -= 1; + [self.tableView deleteRowsAtIndexPaths:@[[self.tableView indexPathForCell:cell]] withRowAnimation:UITableViewRowAnimationAutomatic]; + +} + + + + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/FixCompany.h b/ShiXiSeng_Main/FixCompany.h new file mode 100644 index 0000000..4116310 --- /dev/null +++ b/ShiXiSeng_Main/FixCompany.h @@ -0,0 +1,13 @@ +// +// FixCompany.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface FixCompany : UIViewController + +@end diff --git a/ShiXiSeng_Main/FixCompany.m b/ShiXiSeng_Main/FixCompany.m new file mode 100644 index 0000000..8fbebd6 --- /dev/null +++ b/ShiXiSeng_Main/FixCompany.m @@ -0,0 +1,37 @@ +// +// FixCompany.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "FixCompany.h" + +@interface FixCompany () + +@end + +@implementation FixCompany + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Hope.h b/ShiXiSeng_Main/Hope.h new file mode 100644 index 0000000..a5cea5c --- /dev/null +++ b/ShiXiSeng_Main/Hope.h @@ -0,0 +1,33 @@ +// +// Hope.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "test.h" +#import "Work_Day.h" +#import "DownSheet.h" +#import "CNPPopupController.h" + +@interface Hope : UITableViewController{ + NSArray *MenuList; +} + +@property (nonatomic, strong) IBOutlet UIButton *city; +@property (nonatomic, strong) +IBOutlet UIButton *hope_day; +@property (nonatomic, strong) +IBOutlet UIButton *work_time; +@property (nonatomic, strong) +IBOutlet UIButton *job_kind; +@property (nonatomic, strong) +IBOutlet UIButton *job_time; +@property (nonatomic, strong) +IBOutlet UIButton *timeclick; +@property (nonatomic, strong) +NSString *kind; + +@end diff --git a/ShiXiSeng_Main/Hope.m b/ShiXiSeng_Main/Hope.m new file mode 100644 index 0000000..ff7da7b --- /dev/null +++ b/ShiXiSeng_Main/Hope.m @@ -0,0 +1,151 @@ +// +// Hope.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Hope.h" + +@interface Hope () +@property (nonatomic, strong) CNPPopupController *popupController; +@end + +@implementation Hope +-(IBAction)save:(id)sender{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@" 保存成功!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} +-(IBAction)jobTime:(id)sender{ + [_timeclick setTitle:@"请选择时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +-(void)didSelect:(NSString *)timestring{ + [_timeclick setTitle:timestring forState:UIControlStateNormal]; +} +- (void)showPopupFormSheet:(id)sender { + [self showPopupWithStyle:CNPPopupStyleActionSheet]; +} + +- (void)showPopupFullscreen:(id)sender { + [self showPopupWithStyle:CNPPopupStyleFullscreen]; +} + +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 预期到岗时间" flag:2 buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +#pragma mark - CNPPopupController Delegate + +- (void)popupController:(CNPPopupController *)controller didDismissWithButtonTitle:(NSString *)title { + //NSLog(@"Dismissed with button title: %@", title); +} + +- (void)popupControllerDidPresent:(CNPPopupController *)controller { + //NSLog(@"Popup controller presented."); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + /** + * 绑定本地数据(每周实习天数) + */ + // 读取本地资源文件保存数组 + +} +-(IBAction)job_kind:(id)sender{ + [_job_kind setTitle:@"请选择职业类别" forState:UIControlStateNormal]; + /** + * 绑定本地数据(发送周期) + */ + // 读取本地资源文件保存数组 + MenuList = [[NSArray alloc]init]; + DownSheet *sheet = [[DownSheet alloc]initWithlist:MenuList height:0]; + sheet.delegate = self; + [sheet showInView:self]; +} +-(IBAction)hopeday:(id)sender{ + NSString *fullpath1=[[NSBundle mainBundle]pathForResource:@"work_days.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath1]; + _kind = @" 每周实习天数"; + [_hope_day setTitle:@"请选择时间" forState:UIControlStateNormal]; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:ScreenHeight/3 kind:_kind flag:1]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(IBAction)work_time1:(id)sender{ + [_work_time setTitle:@"请选择时间" forState:UIControlStateNormal]; + /** + * 绑定本地数据(可实习时间) + */ + // 读取本地资源文件保存数组 + NSString *fullpath5 =[[NSBundle mainBundle]pathForResource:@"work_time.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath5]; + _kind =@" 可实习时间"; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:ScreenHeight/2 kind:_kind flag:5]; + sheet.delegate = self; + [sheet showInView:self]; +} +-(IBAction)presscity:(id)sender{ + [_city setTitle:@"请选择地点" forState:UIControlStateNormal]; + test *sheet = [[test alloc]initWithlist:0]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + [_job_kind setTitle:text forState:UIControlStateNormal]; +} +-(void)didSelectIndex:(NSInteger)index workday:(NSString *)workday{ + [_work_time setTitle:workday forState:UIControlStateNormal]; +} +-(void)didSelectIndex:(NSInteger)index days:(NSString*)days{ + + + + [_hope_day setTitle:days forState:UIControlStateNormal]; + + +} +-(void)didSelectIndex:(NSInteger)index city:(NSString*)city{ + + [_city setTitle:city forState:UIControlStateNormal]; + +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29-1.png b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1d85ef5bd8b71c394b84d1d07e0832236c8afead GIT binary patch literal 6526 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 literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29.png b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000000000000000000000000000000000000..63effa3561ca92c6738a2061dcfe43aa73195ec8 GIT binary patch literal 18729 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 ALI3~& literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/40.png b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000000000000000000000000000000000000..05fd86c8d61104db327c35500050109aa044d2b3 GIT binary patch literal 8704 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νy%XP(a_7~z=k5-y+gwYB`pUt(7|Em%f&p{ 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 literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/57.png b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 0000000000000000000000000000000000000000..aeaab020c907545e1557e1de09379ea213cc8d19 GIT binary patch literal 20340 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

MB_VtCs*IeEZRGm?v> z?X|U=FBCPQdoyybzL;u37*2_giF^ic*WR^Fwlm1`2bs}^g@vV-sxZl!B0(}z8H#p` zBaw8rpYYGzXGpl5gfFs)X_6@VnVQx3)pQt8FJ4dbYHNRNYvAn5Q0kxsnKvT?C5nIHaoa-g2> zkA)Vf6Bc&+`v5r#m|?(EY;U#WsiNZ0VkagnNu%v8+ZAI})`|N>UhRS7-e;wd)KUoL zqTEKGjaXv~9h1<>S6%WYr1@%Ws#_YVBi^Pi7!)Ls< z7xGWY%Oz)gG|N)XA1Qsb**Wcx1|5r^NLx8n#>fYATTQ!d_(-^Jrm}+4yzIpALEmYQEzE zRvJuE+WAmBL&Arj+ls*4(#G1rXIEkNBR%uZA8;oFlO=~-I?57ZTTzkNn}3~r5Y#Po z#je+~!`B0~kDu7?K8g6v3E5)|nt);MCiQErCffa2^Deex=wCIF0oFBBML9gQR?k~= zM*&r>kby__hv!@*4Zo-=_u}y8^!d!R_Oq8L%-V?`S5SqW`b) z$Z)$FWOxPB)pnrB%PD%ak_qgfM51-okv{Id2iSgqW))_s2$E~;H7UB4HGB+w*M;sk zQ;v~H^v=%1K<%#BL48Zsox{_Q$xWrbaOm{|0x@^1?roaUs!w96)!D>uU5q zDT?oy*S)hAftz*g^jb5w))K4Q#unryEp*!^oXl5c{}P%CTLs zz7N*i)g-0HF%5_FzBli-in?k141Q~b$v$;#!P()($6`%T{NgMx!B*T#KopgD zsGRZiCfe*M851Pecb8jV-cGjM7s8Fa=|fY~kCF4sZ%;OKcNa62)%0K7;#EX|1dSy3=1Cc70znJni_IC@h%k~@{jNh3O`%BgMA2*UO!S4l zRkS>qKqKzu099#3x?GM4qeOaFP11>n3d6Q-K|-k|)SuY{=`}ZB_P-sEY+WHY?!V75 z#+>F&qxKlLRw|OtOmY!rDR{FMhJVhba!b@JUq|h-@lJtO?y`0N_60^IfCE>7PUG5iMaXRunVXeI{P^DSwb;z@M1IkFdl2g>` zq-03cKJA9q+RFOX*?)L;fh!6Mk!6CP1t+LkM0>v8>aaWwScFIiR7oP6hh}N7>aCwP z{cgAuLrxAgSbmeVIduCK{t1Uliq*drEDj^RwL^wp12srKRZGhxWjS));o%%|fonDQ zJ*fLw{AU9-*EY=Yt35@EfVAO!T%yS`%!)K0>4P%*1M~2DjHB&>9}oSAU(xflMqI5D zug|V6PV=80r<{p09mtcXM_hTxy*;-deIyeAC>h zw@2al2sKBXU~LICe;2K%*kpRpL35)#z!r+QiWD`72;TCrF;R+*lQJom#E&{t(5V^0 z72rZl}?bQB?Px4`AZbXu?jqHnHeRBAc%sJ=^TSy8kXyuDd zJK-5J{nm%laE5KpyYs(pIjuwN_Sl<+wbT5V|K=3t*W{RBJ-7wQM2w{T#^*z3dU`Ml z&`nW71YNyfr$sjMN#n2GHA5t^^W8rI3B}$FI~0!H1WSE=YARIvFj*vxotW0|%Yok@ z5gqv|_U*f=@z)a$O2aSwcC5N~T0?t373$zwz{CCcXDqAa`Io{uQ2P!65x5;rDWS6GUS5>Tz zd?=Z@A+ZbGA>2@IZk>K`_cT=d6WVCXzv87H9YAyq| w(M?_#6!8DL0_Xp)MezT+0_!{;{-FR7ba4&u^O!#(TN?od8P)f-Ql=sQ19^*>5&!@I literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/Contents.json b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..977506c 100644 --- a/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/ShiXiSeng_Main/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,64 +1,46 @@ { "images" : [ { - "idiom" : "iphone", "size" : "29x29", - "scale" : "2x" - }, - { "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" + "filename" : "29.png", + "scale" : "1x" }, { + "size" : "29x29", "idiom" : "iphone", - "size" : "40x40", + "filename" : "29-1.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "40x40", - "scale" : "3x" - }, - { "idiom" : "iphone", - "size" : "60x60", + "filename" : "40.png", "scale" : "2x" }, { + "size" : "57x57", "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", + "filename" : "57.png", "scale" : "1x" }, { - "idiom" : "ipad", - "size" : "29x29", + "size" : "57x57", + "idiom" : "iphone", + "filename" : "57-1.png", "scale" : "2x" }, { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", + "size" : "60x60", + "idiom" : "iphone", + "filename" : "60.png", "scale" : "2x" }, { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" + "size" : "60x60", + "idiom" : "iphone", + "filename" : "60-1.png", + "scale" : "3x" } ], "info" : { diff --git a/ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/Contents.json b/ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/Contents.json new file mode 100644 index 0000000..8e9080c --- /dev/null +++ b/ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "homeICON.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/homeICON.png b/ShiXiSeng_Main/Images.xcassets/Chance/homeICON.imageset/homeICON.png new file mode 100644 index 0000000000000000000000000000000000000000..48573030bf67e8cb64b38e0461a383aad141a331 GIT binary patch literal 3965 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 X;)x$ig75Aj00000NkvXXu0mjfEopIE literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/Contents.json b/ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/Contents.json new file mode 100644 index 0000000..6cdc857 --- /dev/null +++ b/ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "website.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/website.png b/ShiXiSeng_Main/Images.xcassets/Chance/website.imageset/website.png new file mode 100644 index 0000000000000000000000000000000000000000..9d01d4206aa606694d8cd2d46d2457e74ab290fd GIT binary patch literal 4843 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

B;-8qN@ohy>+0SBOQO8bfY>iS=HmJYo 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 z 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%0D5gJqvL@3>s6lDw-{ogfB6?gG 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

41k(h$WF*0y_@%>!H1~v`S!FIyAw)dIeckv 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�@r;w&74pR@h>Q|3f@-#+P}LsE)Rr! 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

QB(QcD3nxQUy{4W_<;) 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

F%QrTpsf`fLfd$ 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 P-hSD2o7Y~K(scem5r3e} literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/Contents.json" new file mode 100644 index 0000000..1c7f8cf --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "我的.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/\346\210\221\347\232\204.png" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\210\221\347\232\204.imageset/\346\210\221\347\232\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..1b8f6a38e67af082ebd5136dfef53f561abd23fc GIT binary patch literal 17247 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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/Contents.json" new file mode 100644 index 0000000..e8b58db --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "机会.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/\346\234\272\344\274\232.png" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\234\272\344\274\232.imageset/\346\234\272\344\274\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..0a5aab7839ce0083933e841fae8c24e0eb0394fb GIT binary patch literal 17247 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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/Contents.json" new file mode 100644 index 0000000..840e629 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "消息.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/\346\266\210\346\201\257.png" "b/ShiXiSeng_Main/Images.xcassets/tabBar/\346\266\210\346\201\257.imageset/\346\266\210\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..6a272018e78ae29a3445714dcd4175e40a764b28 GIT binary patch literal 17247 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

n|W1B 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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/Contents.json" new file mode 100644 index 0000000..c67cc83 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "填写简历.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/\345\241\253\345\206\231\347\256\200\345\216\206.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206.imageset/\345\241\253\345\206\231\347\256\200\345\216\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..d729b31b62e5850dd11c5f08a60f181b8494124a GIT binary patch literal 9885 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 M07*qoM6N<$f^f>xH2?qr literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/Contents.json" new file mode 100644 index 0000000..da8f3ac --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "phone.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/phone.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\241\253\345\206\231\347\256\200\345\216\206/phone.imageset/phone.png" new file mode 100644 index 0000000000000000000000000000000000000000..24f8d0e519f2599bd33a6c53caccde4015c759e0 GIT binary patch literal 3364 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�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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/Contents.json" new file mode 100644 index 0000000..79bf123 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "已关注公司.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.imageset/\345\267\262\345\205\263\346\263\250\345\205\254\345\217\270.png" new file mode 100644 index 0000000000000000000000000000000000000000..b5ffaca53475a60ad67ac21bdda497d9cd0ae66d GIT binary patch literal 9885 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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/Contents.json" new file mode 100644 index 0000000..77eb968 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "已收藏职位.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.imageset/\345\267\262\346\224\266\350\227\217\350\201\214\344\275\215.png" new file mode 100644 index 0000000000000000000000000000000000000000..a052b4fa9916cb4f60890b0b43dece1a40e870b1 GIT binary patch literal 9885 zcmeHN2T&AS*1jYqNRS*vlJHbOg5Xn>EHWrLBO*!3N%D|H5k-+CNumfSq5~?TAd*ya z6cj{2$siJjjO4xjcBy*14+*~6zy7WARDE;1&pG!yAE$e|Z})IrRau^#l$jI&K(2r~ zt`5ij2#B}A&(gP*`fwm|KYE%^o@Yifm&w{kFvF=J@@v&j*KjPT*x1YA6TqI*HilLq~;0h zPqqR_)cuc%wXlV#ph_wWeDUc}orLUE{nc;GiAn(&BS5?RI6skG#CvQH@PR|qfj!ja zT`PWhsysS?Jq&bmQV)>fg{p&!1DX}Ipn?%R(Rg-_6hr`EgZ7f)1P{r<@RWiC5ok#d zZ)X54$-B~tK@c8@*(<*XU+NVw(z>M1hhO{#Bw?gD4-gh-;`!>m5SGXHEg%A}!MdT8 zQbxcxMux8juph<;vb$+&3D^}0k^~!zI@1ju{Bu!wptw4+Hu_ZKLE7BNcg$`RW1Za` z-EVB3$`~{3qcS7u<&2Mx%r0+cD0?~&TrFJLY zRjoM2x{H*IY=qn7Zh>G=pv20-F8j_vpBWfkZu1xe7h<>;5{VaGWtBfF^wFA9&dMJc+p&l6fYjAjZWUa zY6KtfU8G(T> zZeEi!x~|L2Q%-N%rz@%*B5KO2`@1V0OL3wxmUs_-pfAlZ@!2a>Z)`4yhRW+I>dHRg z9_GrX&Lh?#@w+1Q<~Ppp2P)az9@KLs?j~YSLv>GJct$yPb0l(~{f&agFdVgqqViU+ zGARdlsIUT=f;FlQ#h=Ds&Z?g@@;PptypP5 zw<1aM9`)1+>XV}9CHn~P-4T|FNqVSOo1XZA_+fz9ozn`oNv^5_8rRZkL|kIIYvbr; zt5f+?n%>1)np@6V2n;&sk$m>sEf@VRy3zXU_Q8QczbUsJh%%v?QC*56Lti zX;D5ptL=UNgw`|Fo^+BA^pBd-S+!oJAIhv#cT*2htyeQlDKuQVJa0;#b=Chw(p6N7 zrfE(YQxFGzneh2>U72P_ZGs^_>)T2u`dM?simpTpEUp5ciW;&`56v)UVP*;a7i#e+ z%AR(P9r+Z0vW}yUyv~!KfM1gTX|q*^S%y!>@2wuKg{>wdjwAFVL#p0S;&XRX;q&Dwm_`KXtpvrCPujYIxW zYM02{^pfty0^MnrdBGYU#of(2gRj;TcToA*-=9+)ta(8k&?#>dkjrMt6vHs* zO}lTu@WTV&)Uq|4FF4QgHDh}97R(ER$3xO@zC7Ay^}^BB9AjmpZeuzem+PDRF!z%C zweND{(bUc~dq_sE_m;Gjh+pq@unXj4FL;c1o-?6IbH=RpbhjgOb&r=H#9{cB?-@J96gm=cC@T^A=ZC zPPmjEBvDc4MTarnddW4Zqt ztnSx%@1890WgU^o^oYu8yUeN6FHPx;BhP7Jt)iRswJ+{xh&04FU>;q?@em5l+bCA#g5giG zO%lIbfc<(iC4u!Ut9)V3iVs$($JC`9lV1ix494;urZ{I!+PHI0Wr$~r%lkMib)g>X+YgD%^s%5N95m!F<5w(b0GRBTlLR*w=(L2@l|Ib!AgwXR0_8u=!!6I?+d z32baEZ^RTSI|RFj|MuHx))B>>n^s8kj%Kx3LFOka1jLHn-KtFw*g?Vzhzi@0sxjOh2zqi?sy=NMXncb zWd)}G4;cRcfW|*0{t}AoBlWAJxb7(74++bU{V=pafC$D9LBQw8pR^+-f0_8-IP_Mq z${h$qFwP9uLU%%C-VpG54yiNMDXhNzg#~*;8N&+c99y&Ld4?4 za4GaURP>+cC33#<;6f>`gi1m&YHJ8Wgx^@hzhxILgd!Zl>r_^OG3j;Un+oAV=vi1v zc!O#|F#fk{{rH0a)5@d0knL;S_o6B-S(E&ehCcMjypi2n<#tix~vc@XGc zb*zr-oj3L{>BVZ||G_u~YrvVLEj}rJfK-*DgTx zK>WxSVcN&beTHL4o5{m1d{^}^MI||=;tgNs<)6LS$I1z`CE66Dy&y+E`{1594 BroI3G literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/Contents.json" new file mode 100644 index 0000000..15559bb --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "MineBG.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/MineBG.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\346\210\221\347\232\204\350\203\214\346\231\257.imageset/MineBG.png" new file mode 100644 index 0000000000000000000000000000000000000000..70c0a5d7705a7ea0fdf76b6236ced1214b80be86 GIT binary patch literal 233457 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

juJiDr?vnVuu05!_QVOueIbS@CNEAP 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 EKiupFQ2+n{ literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/Contents.json" new file mode 100644 index 0000000..9e967a5 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "设置.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/\350\256\276\347\275\256.png" "b/ShiXiSeng_Main/Images.xcassets/\344\270\252\344\272\272\344\270\255\345\277\203/\350\256\276\347\275\256.imageset/\350\256\276\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..d355ef128f55df514adde5279180e2066913ec2e GIT binary patch literal 10932 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

gsTZr3k2-CgIL|M{QO{XX|Rb*rmF{xz{G_}DL? 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⁣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 BgLnV{ literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/Contents.json" "b/ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/Contents.json" new file mode 100644 index 0000000..af5cf81 --- /dev/null +++ "b/ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/Contents.json" @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "1x" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "filename" : "登录界面.png" + }, + { + "idiom" : "iphone", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/\347\231\273\345\275\225\347\225\214\351\235\242.png" "b/ShiXiSeng_Main/Images.xcassets/\347\231\273\345\275\225\347\225\214\351\235\242.imageset/\347\231\273\345\275\225\347\225\214\351\235\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..d3fe1e9bb613c277ffadf87f066c17a78fa4994b GIT binary patch literal 3691024 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

ll2n(ZUsuTI9qSPQ<4);Cc;yszz?7?TJZ%kZ&GQ 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 b?&n|r`udOGfBZAszx(+8x4(Y#!%u$$>|OlE literal 0 HcmV?d00001 diff --git a/ShiXiSeng_Main/Info.plist b/ShiXiSeng_Main/Info.plist index 07bb412..230d83a 100644 --- a/ShiXiSeng_Main/Info.plist +++ b/ShiXiSeng_Main/Info.plist @@ -6,16 +6,30 @@ en CFBundleExecutable $(EXECUTABLE_NAME) + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + ${AppIcon}.png + + UIPrerenderedIcon + + + + CFBundleIcons~ipad + CFBundleIdentifier -1.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName - $(PRODUCT_NAME) + 实习僧 CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.0.0 CFBundleSignature ???? CFBundleVersion @@ -30,6 +44,8 @@ armv7 + UIStatusBarStyle + UIStatusBarStyleDefault UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/ShiXiSeng_Main/InteMsg.h b/ShiXiSeng_Main/InteMsg.h new file mode 100644 index 0000000..bbb3746 --- /dev/null +++ b/ShiXiSeng_Main/InteMsg.h @@ -0,0 +1,13 @@ +// +// InteMsg.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface InteMsg : UITableViewController + +@end diff --git a/ShiXiSeng_Main/InteMsg.m b/ShiXiSeng_Main/InteMsg.m new file mode 100644 index 0000000..ad9548f --- /dev/null +++ b/ShiXiSeng_Main/InteMsg.m @@ -0,0 +1,125 @@ +// +// InteMsg.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "InteMsg.h" +#import "MsgCell.h" + +@interface InteMsg () + +@end + +@implementation InteMsg + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; + [self.tableView registerNib:[UINib nibWithNibName:@"MsgCell" bundle:nil] forCellReuseIdentifier:@"MsgCell"]; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return 5; +} +// 设置每一行的内容 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"MsgCell"; + MsgCell *cell = (MsgCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + + cell.jobname.text = @"建设银行CEO"; + cell.companyname.text = @"建设银行"; + cell.suit.text = @"通知面试"; + + return cell; +} +// 为表格建立点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; + [self.navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"company"] animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/InteMsg.xib b/ShiXiSeng_Main/InteMsg.xib new file mode 100644 index 0000000..b013360 --- /dev/null +++ b/ShiXiSeng_Main/InteMsg.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/Job.h b/ShiXiSeng_Main/Job.h new file mode 100644 index 0000000..6535c3b --- /dev/null +++ b/ShiXiSeng_Main/Job.h @@ -0,0 +1,25 @@ +// 职位的数据模型 +// Job.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/5. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface Job : NSObject + +// 声明需要存读的数据属性 +@property(nonatomic,copy) NSString *icon; +@property(nonatomic,copy) NSString *date; +@property(nonatomic,copy) NSString *salary; +@property(nonatomic,copy) NSString *workday; +@property(nonatomic,copy) NSString *location; +@property(nonatomic,copy) NSString *company; +@property(nonatomic,copy) NSString *job; + +-(instancetype)initWithDict:(NSDictionary *)dict; ++(instancetype)jobInfoWithDict:(NSDictionary *)dict; + +@end diff --git a/ShiXiSeng_Main/Job.m b/ShiXiSeng_Main/Job.m new file mode 100644 index 0000000..e361f43 --- /dev/null +++ b/ShiXiSeng_Main/Job.m @@ -0,0 +1,26 @@ +// 职位的数据模型 +// Job.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/5. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Job.h" + +@implementation Job + +// 实现job.h中的方法 + +-(instancetype)initWithDict:(NSDictionary *)dict{ + if(self = [super init]){ + [self setValuesForKeysWithDictionary:dict]; + } + return self; +} + ++(instancetype)jobInfoWithDict:(NSDictionary *)dict{ + return [[self alloc]initWithDict:dict]; +} + +@end diff --git a/ShiXiSeng_Main/Job.plist b/ShiXiSeng_Main/Job.plist new file mode 100644 index 0000000..00c559b --- /dev/null +++ b/ShiXiSeng_Main/Job.plist @@ -0,0 +1,102 @@ + + + + + + icon + 中国科学院 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 中国科学院 + job + 大客户销售代表 + + + icon + 联想 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 联想集团-企业营销部 + job + 销售助理实习生 + + + icon + 京东 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 京东金融 + job + 企业文化编辑实习生 + + + icon + 百词斩 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 百词斩 + job + 运营管理培训生 + + + icon + 爱奇艺 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 爱奇艺-内容部 + job + 拍客频道节目运营 + + + icon + 嘀嗒清单 + date + 03-20发布 + salary + ¥100-150/天 + workday + 4天 + location + 上海 + company + 嘀嗒清单 + job + WEB前端开发实习生 + + + diff --git a/ShiXiSeng_Main/Job.xib b/ShiXiSeng_Main/Job.xib new file mode 100644 index 0000000..44f37f7 --- /dev/null +++ b/ShiXiSeng_Main/Job.xib @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/JobCell.h b/ShiXiSeng_Main/JobCell.h new file mode 100644 index 0000000..bf577e5 --- /dev/null +++ b/ShiXiSeng_Main/JobCell.h @@ -0,0 +1,22 @@ +// +// JobCell.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface JobCell : UITableViewCell + +// 声明在单元格内需要绑定的对象 +@property(weak,nonatomic) IBOutlet UIImageView *companyIcon; +@property(weak,nonatomic) IBOutlet UILabel *date; +@property(weak,nonatomic) IBOutlet UILabel *salary; +@property(weak,nonatomic) IBOutlet UILabel *workday; +@property(weak,nonatomic) IBOutlet UILabel *location; +@property(weak,nonatomic) IBOutlet UILabel *companyName; +@property(weak,nonatomic) IBOutlet UILabel *job; + +@end diff --git a/ShiXiSeng_Main/JobCell.m b/ShiXiSeng_Main/JobCell.m new file mode 100644 index 0000000..973fd80 --- /dev/null +++ b/ShiXiSeng_Main/JobCell.m @@ -0,0 +1,23 @@ +// +// JobCell.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "JobCell.h" + +@implementation JobCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ShiXiSeng_Main/JobCollect.h b/ShiXiSeng_Main/JobCollect.h new file mode 100644 index 0000000..4b04c1d --- /dev/null +++ b/ShiXiSeng_Main/JobCollect.h @@ -0,0 +1,16 @@ +// +// JobCollect.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import "DAContextMenuTableViewController.h" + +@interface JobCollect : DAContextMenuTableViewController + +@property (strong, nonatomic) IBOutlet UITableView *table; + +@end diff --git a/ShiXiSeng_Main/JobCollect.m b/ShiXiSeng_Main/JobCollect.m new file mode 100644 index 0000000..67de186 --- /dev/null +++ b/ShiXiSeng_Main/JobCollect.m @@ -0,0 +1,111 @@ +// +// JobCollect.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "JobCollect.h" +#import "DAContextMenuCell.h" + +@interface JobCollect () + +@property (assign, nonatomic) NSInteger rowsCount; + +@end + +@implementation JobCollect +-(IBAction)pop:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:YES]; +} +- (void)viewDidLoad { + [super viewDidLoad]; + self.rowsCount = 20; + + // Do any additional setup after loading the view. +} +-(void)viewWillAppear:(BOOL)animated{ + + [_table reloadData]; + NSLog(@"职位订阅页已经刷新!!!"); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +//表格的某单元格可编辑 +-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath +{ + return YES; +} +//表格的某单元格可移动 +-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath +{ + return YES; +} + +#pragma mark - Private + +- (void)setRowsCount:(NSInteger)rowsCount +{ + if (rowsCount < 0) { + _rowsCount = 0; + } else { + _rowsCount = rowsCount; + } +} + +#pragma mark * Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.rowsCount; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"job_collect"; + DAContextMenuCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + cell.delegate = self; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 90; +} + +#pragma mark * DAContextMenuCell delegate + +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell +{ + [super contextMenuCellDidSelectDeleteOption:cell]; + self.rowsCount -= 1; + [self.tableView deleteRowsAtIndexPaths:@[[self.tableView indexPathForCell:cell]] withRowAnimation:UITableViewRowAnimationAutomatic]; + +} + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell +{ + + [self performSegueWithIdentifier:@"show_detail" sender:self]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/JobInfoa.h b/ShiXiSeng_Main/JobInfoa.h new file mode 100644 index 0000000..9f445fc --- /dev/null +++ b/ShiXiSeng_Main/JobInfoa.h @@ -0,0 +1,13 @@ +// +// JobInfoa.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface JobInfoa : UIViewController + +@end diff --git a/ShiXiSeng_Main/JobInfoa.m b/ShiXiSeng_Main/JobInfoa.m new file mode 100644 index 0000000..fd6ede9 --- /dev/null +++ b/ShiXiSeng_Main/JobInfoa.m @@ -0,0 +1,37 @@ +// +// JobInfoa.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "JobInfoa.h" + +@interface JobInfoa () + +@end + +@implementation JobInfoa + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/JobTable.h b/ShiXiSeng_Main/JobTable.h new file mode 100644 index 0000000..4165ef9 --- /dev/null +++ b/ShiXiSeng_Main/JobTable.h @@ -0,0 +1,15 @@ +// +// JobTable.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface JobTable : UITableViewController + ++ (instancetype)JobTableViewWithFrame:(CGRect)frame; + +@end diff --git a/ShiXiSeng_Main/JobTable.m b/ShiXiSeng_Main/JobTable.m new file mode 100644 index 0000000..aa659b7 --- /dev/null +++ b/ShiXiSeng_Main/JobTable.m @@ -0,0 +1,145 @@ +// +// JobTable.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "JobTable.h" +#import "JobCell.h" + +@interface JobTable () + +@property(nonatomic,strong)NSArray *job; + +@end + +@implementation JobTable + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 读取本地资源文件保存数组 + NSBundle *bundle = [NSBundle mainBundle]; + NSString *plistPath = [bundle pathForResource:@"job" ofType:@"plist"]; + self.job = [[NSArray alloc] initWithContentsOfFile:plistPath]; + + } + +// 为容器设置位置的方法 ++ (instancetype)JobTableViewWithFrame:(CGRect)frame { + JobTable *jobt = [[self alloc] initWithFrame:frame]; + return jobt; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // 表格的长度 + return self.job.count; +} +//-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// static NSString *identifier=@"jobinfo"; +// JobCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; +// NSUInteger row = [indexPath row]; +// NSDictionary *rowDict = [self.job objectAtIndex:row]; +// +// // 本地绑定数据 +// NSString *imagePath = [rowDict objectForKey:@"icon"]; +// imagePath = [imagePath stringByAppendingString:@".png"]; +// cell.companyIcon.image = [UIImage imageNamed:imagePath]; +// +// cell.date.text = [rowDict objectForKey:@"date"]; +// cell.salary.text = [rowDict objectForKey:@"salary"]; +// cell.workday.text = [rowDict objectForKey:@"workday"]; +// cell.location.text = [rowDict objectForKey:@"location"]; +// cell.companyName.text = [rowDict objectForKey:@"company"]; +// cell.job.text = [rowDict objectForKey:@""]; +// +// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; +// return cell; +// +//} + +// 为单元表格附值 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *identifier = @"JobCell"; + + JobCell *cell = (JobCell*)[tableView dequeueReusableCellWithIdentifier:identifier]; + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [self.job objectAtIndex:row]; + + // 本地绑定数据 + NSString *imagePath = [rowDict objectForKey:@"icon"]; + imagePath = [imagePath stringByAppendingString:@".png"]; + cell.companyIcon.image = [UIImage imageNamed:imagePath]; + + cell.date.text = [rowDict objectForKey:@"date"]; + cell.salary.text = [rowDict objectForKey:@"salary"]; + cell.workday.text = [rowDict objectForKey:@"workday"]; + cell.location.text = [rowDict objectForKey:@"location"]; + cell.companyName.text = [rowDict objectForKey:@"company"]; + cell.job.text = [rowDict objectForKey:@"job"]; + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/JobView.h b/ShiXiSeng_Main/JobView.h new file mode 100644 index 0000000..5cfb3ac --- /dev/null +++ b/ShiXiSeng_Main/JobView.h @@ -0,0 +1,15 @@ +// +// JobView.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface JobView : UITableView + + + +@end diff --git a/ShiXiSeng_Main/JobView.m b/ShiXiSeng_Main/JobView.m new file mode 100644 index 0000000..ee56398 --- /dev/null +++ b/ShiXiSeng_Main/JobView.m @@ -0,0 +1,21 @@ +// +// JobView.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "JobView.h" + +@implementation JobView + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/ShiXiSeng_Main/Job_Sub_Cell.h b/ShiXiSeng_Main/Job_Sub_Cell.h new file mode 100644 index 0000000..111d517 --- /dev/null +++ b/ShiXiSeng_Main/Job_Sub_Cell.h @@ -0,0 +1,44 @@ +// +// Job_Sub_Cell.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/15/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import + +@class DAContextMenuCell; + +@protocol DAContextMenuCellDelegate + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell; +- (void)contextMenuDidHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuDidShowInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillShowInCell:(DAContextMenuCell *)cell; +- (BOOL)shouldShowMenuOptionsViewInCell:(DAContextMenuCell *)cell; +@optional +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell; + +@end + +@interface Job_Sub_Cell : UITableViewCell + +@property (strong, nonatomic) IBOutlet UIView *actualContentView; + +@property (readonly, assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (strong, nonatomic) NSString *deleteButtonTitle; +@property (assign, nonatomic) BOOL editable; +@property (assign, nonatomic) CGFloat menuOptionButtonTitlePadding; +@property (assign, nonatomic) CGFloat menuOptionsAnimationDuration; +@property (assign, nonatomic) CGFloat bounceValue; +@property (strong, nonatomic) NSString *moreOptionsButtonTitle; + +@property (weak, nonatomic) id delegate; + +- (CGFloat)contextMenuWidth; +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler; + + +@end diff --git a/ShiXiSeng_Main/Job_Sub_Cell.m b/ShiXiSeng_Main/Job_Sub_Cell.m new file mode 100644 index 0000000..f475a31 --- /dev/null +++ b/ShiXiSeng_Main/Job_Sub_Cell.m @@ -0,0 +1,268 @@ +// +// Job_Sub_Cell.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/15/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Job_Sub_Cell.h" + +@interface Job_Sub_Cell() + +@property (strong, nonatomic) UIView *contextMenuView; +@property (strong, nonatomic) UIButton *moreOptionsButton; +@property (strong, nonatomic) UIButton *deleteButton; +@property (assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (assign, nonatomic) BOOL shouldDisplayContextMenuView; +@property (assign, nonatomic) CGFloat initialTouchPositionX; + +@end + +@implementation Job_Sub_Cell + +#pragma mark - Initialization + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self setUp]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self setUp]; +} + +- (void)setUp +{ + self.contextMenuView = [[UIView alloc] initWithFrame:self.actualContentView.bounds]; + self.contextMenuView.backgroundColor = self.contentView.backgroundColor; + [self.contentView insertSubview:self.contextMenuView belowSubview:self.actualContentView]; + self.contextMenuHidden = self.contextMenuView.hidden = YES; + self.shouldDisplayContextMenuView = NO; + self.editable = YES; + self.moreOptionsButtonTitle = @"Edit"; + self.deleteButtonTitle = @"Delete"; + self.menuOptionButtonTitlePadding = 25.; + self.menuOptionsAnimationDuration = 0.3; + self.bounceValue = 30.; + UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; + panRecognizer.delegate = self; + [self addGestureRecognizer:panRecognizer]; + [self setNeedsLayout]; +} + +#pragma mark - Public + +- (CGFloat)contextMenuWidth +{ + return CGRectGetWidth(self.deleteButton.frame) + CGRectGetWidth(self.moreOptionsButton.frame); +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + self.contextMenuView.frame = self.actualContentView.bounds; + [self.contentView sendSubviewToBack:self.contextMenuView]; + [self.contentView bringSubviewToFront:self.actualContentView]; + + CGFloat height = CGRectGetHeight(self.bounds); + CGFloat width = CGRectGetWidth(self.bounds); + CGFloat menuOptionButtonWidth = [self menuOptionButtonWidth]; + self.moreOptionsButton.frame = CGRectMake(width - menuOptionButtonWidth - CGRectGetWidth(self.deleteButton.frame), 0., menuOptionButtonWidth, height); + self.deleteButton.frame = CGRectMake(width - menuOptionButtonWidth, 0., menuOptionButtonWidth, height); +} + +- (CGFloat)menuOptionButtonWidth +{ + NSString *string = ([self.deleteButtonTitle length] > [self.moreOptionsButtonTitle length]) ? self.deleteButtonTitle : self.moreOptionsButtonTitle; + CGFloat width = roundf([string sizeWithFont:self.moreOptionsButton.titleLabel.font].width + 2. * self.menuOptionButtonTitlePadding); + width = MIN(width, CGRectGetWidth(self.bounds) / 2. - 10.); + if ((NSInteger)width % 2) { + width += 1.; + } + return width; +} + +- (void)setDeleteButtonTitle:(NSString *)deleteButtonTitle +{ + _deleteButtonTitle = deleteButtonTitle; + [self.deleteButton setTitle:deleteButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setEditable:(BOOL)editable +{ + if (_editable != editable) { + _editable = editable; + [self setNeedsLayout]; + } +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setHighlighted:highlighted animated:animated]; + } +} + +- (void)setMenuOptionButtonTitlePadding:(CGFloat)menuOptionButtonTitlePadding +{ + if (_menuOptionButtonTitlePadding != menuOptionButtonTitlePadding) { + _menuOptionButtonTitlePadding = menuOptionButtonTitlePadding; + [self setNeedsLayout]; + } +} + +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler +{ + if (self.selected) { + [self setSelected:NO animated:NO]; + } + CGRect frame = CGRectMake((hidden) ? 0 : -[self contextMenuWidth], 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + [UIView animateWithDuration:(animated) ? self.menuOptionsAnimationDuration : 0. + delay:0. + options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut + animations:^ + { + self.actualContentView.frame = frame; + } completion:^(BOOL finished) { + self.contextMenuHidden = hidden; + self.shouldDisplayContextMenuView = !hidden; + if (!hidden) { + // [self.delegate contextMenuDidShowInCell:self]; + } else { + // [self.delegate contextMenuDidHideInCell:self]; + } + if (completionHandler) { + completionHandler(); + } + }]; +} + +- (void)setMoreOptionsButtonTitle:(NSString *)moreOptionsButtonTitle +{ + _moreOptionsButtonTitle = moreOptionsButtonTitle; + [self.moreOptionsButton setTitle:self.moreOptionsButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setSelected:selected animated:animated]; + } +} + +#pragma mark - Private + +- (void)handlePan:(UIPanGestureRecognizer *)recognizer; +{ + if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + UIPanGestureRecognizer *panRecognizer = (UIPanGestureRecognizer *)recognizer; + + CGPoint currentTouchPoint = [panRecognizer locationInView:self.contentView]; + CGFloat currentTouchPositionX = currentTouchPoint.x; + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.initialTouchPositionX = currentTouchPositionX; + if (velocity.x > 0) { + // [self.delegate contextMenuWillHideInCell:self]; + } else { + // [self.delegate contextMenuDidShowInCell:self]; + } + } else if (recognizer.state == UIGestureRecognizerStateChanged) { + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (!self.contextMenuHidden || (velocity.x > 0. )) { + if (self.selected) { + [self setSelected:NO animated:NO]; + } + self.contextMenuView.hidden = NO; + CGFloat panAmount = currentTouchPositionX - self.initialTouchPositionX; + self.initialTouchPositionX = currentTouchPositionX; + CGFloat minOriginX = -[self contextMenuWidth] - self.bounceValue; + CGFloat maxOriginX = 0.; + CGFloat originX = CGRectGetMinX(self.actualContentView.frame) + panAmount; + originX = MIN(maxOriginX, originX); + originX = MAX(minOriginX, originX); + + + if ((originX < -0.5 * [self contextMenuWidth] && velocity.x < 0.) || velocity.x < -100) { + self.shouldDisplayContextMenuView = YES; + } else if ((originX > -0.3 * [self contextMenuWidth] && velocity.x > 0.) || velocity.x > 100) { + self.shouldDisplayContextMenuView = NO; + } + self.actualContentView.frame = CGRectMake(originX, 0., CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + } + } else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) { + [self setMenuOptionsViewHidden:!self.shouldDisplayContextMenuView animated:YES completionHandler:nil]; + } + } +} + +- (void)deleteButtonTapped +{ + if ([self.delegate respondsToSelector:@selector(contextMenuCellDidSelectDeleteOption:)]) { + // [self.delegate contextMenuCellDidSelectDeleteOption:self]; + } +} + +- (void)moreButtonTapped +{ + // [self.delegate contextMenuCellDidSelectMoreOption:self]; +} + +- (void)prepareForReuse +{ + [super prepareForReuse]; + [self setMenuOptionsViewHidden:YES animated:NO completionHandler:nil]; +} + +#pragma mark * Lazy getters + +- (UIButton *)moreOptionsButton +{ + if (!_moreOptionsButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _moreOptionsButton = [[UIButton alloc] initWithFrame:frame]; + _moreOptionsButton.backgroundColor = [UIColor lightGrayColor]; + [self.contextMenuView addSubview:_moreOptionsButton]; + [_moreOptionsButton addTarget:self action:@selector(moreButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _moreOptionsButton; +} + +- (UIButton *)deleteButton +{ + if (self.editable) { + if (!_deleteButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _deleteButton = [[UIButton alloc] initWithFrame:frame]; + _deleteButton.backgroundColor = [UIColor colorWithRed:251./255. green:34./255. blue:38./255. alpha:1.]; + [self.contextMenuView addSubview:_deleteButton]; + [_deleteButton addTarget:self action:@selector(deleteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _deleteButton; + } + return nil; +} + +#pragma mark * UIPanGestureRecognizer delegate + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer +{ + if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self]; + return fabs(translation.x) > fabs(translation.y); + } + return YES; +} + +@end diff --git a/ShiXiSeng_Main/Job_Subscribe.h b/ShiXiSeng_Main/Job_Subscribe.h new file mode 100644 index 0000000..6157bbb --- /dev/null +++ b/ShiXiSeng_Main/Job_Subscribe.h @@ -0,0 +1,15 @@ +// +// Job_Subscribe.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "DAContextMenuTableViewController.h" + +@interface Job_Subscribe : DAContextMenuTableViewController +@property (strong, nonatomic) IBOutlet UITableView *table; + +@end diff --git a/ShiXiSeng_Main/Job_Subscribe.m b/ShiXiSeng_Main/Job_Subscribe.m new file mode 100644 index 0000000..2a162ab --- /dev/null +++ b/ShiXiSeng_Main/Job_Subscribe.m @@ -0,0 +1,143 @@ +// +// Job_Subscribe.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/14/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Job_Subscribe.h" + +#import "DAContextMenuCell.h" + +@interface Job_Subscribe () + +@property (assign, nonatomic) NSInteger rowsCount; + +@end + +@implementation Job_Subscribe + +- (void)viewDidLoad { + [super viewDidLoad]; + self.rowsCount = 20; + +} +-(void)viewWillAppear:(BOOL)animated{ + + [_table reloadData]; + NSLog(@"职位订阅页已经刷新!!!"); +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Private + +- (void)setRowsCount:(NSInteger)rowsCount +{ + if (rowsCount < 0) { + _rowsCount = 0; + } else { + _rowsCount = rowsCount; + } +} + +#pragma mark * Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.rowsCount; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"job_subscribea"; + DAContextMenuCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + cell.delegate = self; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 72; +} + +#pragma mark * DAContextMenuCell delegate + +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell +{ + [super contextMenuCellDidSelectDeleteOption:cell]; + self.rowsCount -= 1; + [self.tableView deleteRowsAtIndexPaths:@[[self.tableView indexPathForCell:cell]] withRowAnimation:UITableViewRowAnimationAutomatic]; + +} + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell +{ + + [self performSegueWithIdentifier:@"show_detail" sender:self]; +} + + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Jobdetail.h b/ShiXiSeng_Main/Jobdetail.h new file mode 100644 index 0000000..3c64553 --- /dev/null +++ b/ShiXiSeng_Main/Jobdetail.h @@ -0,0 +1,13 @@ +// +// Jobdetail.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface Jobdetail : UITableViewController + +@end diff --git a/ShiXiSeng_Main/Jobdetail.m b/ShiXiSeng_Main/Jobdetail.m new file mode 100644 index 0000000..bd8c7ee --- /dev/null +++ b/ShiXiSeng_Main/Jobdetail.m @@ -0,0 +1,41 @@ +// +// Jobdetail.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Jobdetail.h" + +@interface Jobdetail () + +@end + +@implementation Jobdetail + +-(IBAction)home:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:true]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/MViewController.h b/ShiXiSeng_Main/MViewController.h new file mode 100644 index 0000000..184485f --- /dev/null +++ b/ShiXiSeng_Main/MViewController.h @@ -0,0 +1,15 @@ +// +// MViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface MViewController : UITableViewController + +@property (strong,nonatomic) IBOutlet UIImageView *uiimage; + +@end diff --git a/ShiXiSeng_Main/MViewController.m b/ShiXiSeng_Main/MViewController.m new file mode 100644 index 0000000..c0ef74c --- /dev/null +++ b/ShiXiSeng_Main/MViewController.m @@ -0,0 +1,82 @@ +// +// MViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "MViewController.h" + +@interface MViewController () + +@end + +@implementation MViewController + +-(void)viewWillAppear:(BOOL)animated{ + + NSLog(@"头像数据, 学校/专业, 姓名, 数据已经刷新"); + +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Do any additional setup after loading the view. + // 画布的宽度 + long int width = (self.view.bounds.size.width/2)-40; + + // 创建一个uibutton(用来设置个人基本资料) + UIButton *uibutton = [[UIButton alloc]initWithFrame:CGRectMake(width, 50, 80, 80)]; + [uibutton setTitle:@"Test" forState:UIControlStateDisabled]; + [uibutton setImage:[UIImage imageNamed:@"头像.png"] forState:UIControlStateNormal]; + + // 给uibutton添加一个点击事件引导用户进入下一页 + [uibutton addTarget:self action:@selector(Button2Method) forControlEvents:UIControlEventTouchUpInside]; + + + // 创建一个label设置名字(18号字体) + UILabel *Name = [[UILabel alloc]initWithFrame:CGRectMake(0, 120, self.view.bounds.size.width, 80)]; + [Name setText:@"鲁炎"]; + [Name setTextAlignment:NSTextAlignmentCenter]; + [Name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]]; + [Name setTextColor:[UIColor whiteColor]]; + + // 创建一个label设置个人信息(学校/专业) + UILabel *Details = [[UILabel alloc]initWithFrame:CGRectMake(0, 180, self.view.bounds.size.width, 40)]; + [Details setTextAlignment:NSTextAlignmentCenter]; + [Details setText:@"四川大学/软件工程"]; + [Details setTextColor:[UIColor whiteColor]]; + [Details setFont:[UIFont systemFontOfSize:14]]; + + // 依次给向背景图层里面加入button, name, Details + [self.uiimage addSubview:uibutton]; + [self.uiimage addSubview:Name]; + [self.uiimage addSubview:Details]; + self.uiimage.userInteractionEnabled = YES; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +// uibutton的点击事件(进入下一步) +-(void)Button2Method +{ + NSLog(@"This is Test for ClickButton!"); + [self performSegueWithIdentifier:@"BasicInfo" sender:self]; + +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Main.storyboard b/ShiXiSeng_Main/Main.storyboard new file mode 100644 index 0000000..3c87f85 --- /dev/null +++ b/ShiXiSeng_Main/Main.storyboard @@ -0,0 +1,3776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1、负责商业产品日常运营工作。 +2、负责腾讯商业网站的运维。 +3、统计商业产品的各项数据并分析。 +4、撰写相关的项目报告并推进项目进程。 +任职要求: +1、本科及以上学历,大三或研二优先 +2、每周需要全职实习,5个工作日全勤(硬性条件), +连续实习6个月以上; +3、表达沟通强,可以很好的跟人沟通,取得预期的结 +果; +4、做事情耐心严谨,逻辑思维能力强,; +5、熟悉使用office办公软件,熟悉EXCEL和PPT,有较 +强的数据敏感度,有一定的文字撰写能力。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 本产品所提供的各项服务的所有权、知识产权和运作权均归实习僧所有。用户必须统一下诉所有服务条款并完成注册程序,才能成为本产品的正式用户并使用本产品所提供的各项服务。服务条款的修改权归实习僧所有。用户应当随时关注本服务条款的修改,并决定是否继续使用产品提 +供的各项服务。用户登陆并使用本产品的服务行为,经被视为用户对当时的及后续任何时间修改的服务条款以及《实习僧网注册协议》的同意和承诺遵守。 +条款内容如下: + +一.本产品作为实习僧旗下的产品,以自身所有的操作系统,通过国际互联网络等手段为用户提供相应服务。实习僧保留谁是修改或中断服务而不需通知用户的权利。实习僧行使修改或中断服务的权利,不须对任何用户或第三方负责。本服务条款内容不单独提示,用户需在注册时自行进入注册界面的条款链接,并仔细阅读条款内容。若用户最终完成注册,则说明用户已完全理解服务条款所列全部内容,同意并承诺遵守全部条款。 + +二.用户必须自行准备如下设备和承担如下开支: +(1)用户理解并确认,本产品仅提供相关的网络服务,除此之外与之相关的设备,包括但不限于具有联网功能的手机,以及其他与介入互联网或移动网络相关的设备应用由用户自行承担; +(2)用户应自行了解并承担因使用本产品而产生的所需费用,包括接入互联网而使用移动网而流量费等开支。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/MessageViewController.h b/ShiXiSeng_Main/MessageViewController.h new file mode 100644 index 0000000..b563377 --- /dev/null +++ b/ShiXiSeng_Main/MessageViewController.h @@ -0,0 +1,13 @@ +// +// MessageViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/2. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface MessageViewController : UIViewController + +@end diff --git a/ShiXiSeng_Main/MessageViewController.m b/ShiXiSeng_Main/MessageViewController.m new file mode 100644 index 0000000..de92e05 --- /dev/null +++ b/ShiXiSeng_Main/MessageViewController.m @@ -0,0 +1,83 @@ +// +// MessageViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/2. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "MessageViewController.h" +#import "SDCycleScrollView.h" +#import "YSLContainerViewController.h" +#import "PlayListTableViewController.h" +#import "ArtistsViewController.h" +#import "SampleViewController.h" + +#import "RefuseMsg.h" +#import "InteMsg.h" +#import "lookMsg.h" +#import "AllMsg.h" + +@interface MessageViewController () + +@end + +@implementation MessageViewController + +- (void)viewDidLoad { + + [super viewDidLoad]; + // Do any additional setup after loading the view. + + // SetUp ViewControllers + + + AllMsg *all = [[AllMsg alloc] initWithNibName:@"AllMsg" bundle:nil]; + all.title = @"全部"; + lookMsg *look = [[lookMsg alloc] initWithNibName:@"lookMsg" bundle:nil]; + look.title = @"被查看"; + InteMsg *inte = [[InteMsg alloc] initWithNibName:@"InteMsg" bundle:nil]; + inte.title = @"通知面试"; + RefuseMsg *refuse = [[RefuseMsg alloc] initWithNibName:@"RefuseMsg" bundle:nil]; + refuse.title = @"不合适"; + + + + + // ContainerView + float statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; + float navigationHeight = self.navigationController.navigationBar.frame.size.height; + + YSLContainerViewController *containerVC = [[YSLContainerViewController alloc]initWithControllers:@[ all, look, inte, refuse] + topBarHeight:statusHeight + navigationHeight + parentViewController:self]; + containerVC.delegate = self; + containerVC.menuItemFont = [UIFont fontWithName:@"Futura-Medium" size:16]; + + [self.view addSubview:containerVC.view]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark -- YSLContainerViewControllerDelegate +- (void)containerViewItemIndex:(NSInteger)index currentController:(UIViewController *)controller +{ + // NSLog(@"current Index : %ld",(long)index); + // NSLog(@"current controller : %@",controller); + [controller viewWillAppear:YES]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/MineTableViewController.h b/ShiXiSeng_Main/MineTableViewController.h new file mode 100644 index 0000000..89545a9 --- /dev/null +++ b/ShiXiSeng_Main/MineTableViewController.h @@ -0,0 +1,15 @@ +// +// MineTableViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface MineTableViewController : UITableViewController + +@property (strong,nonatomic) IBOutlet UIImageView *uiimage; + +@end diff --git a/ShiXiSeng_Main/MineTableViewController.m b/ShiXiSeng_Main/MineTableViewController.m new file mode 100644 index 0000000..4eeaa4f --- /dev/null +++ b/ShiXiSeng_Main/MineTableViewController.m @@ -0,0 +1,103 @@ +// +// MineTableViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "MineTableViewController.h" + +@interface MineTableViewController () + +@end + +@implementation MineTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // 创建一个uibutton + UIButton *uibutton = [[UIButton alloc]initWithFrame:CGRectMake(0, 80, 40, 40)]; + [uibutton setTitle:@"Test" forState:UIControlStateDisabled]; + //[self.uiimage addSubview:uibutton]; + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { +#warning Potentially incomplete method implementation. + // Return the number of sections. + return 0; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { +#warning Incomplete method implementation. + // Return the number of rows in the section. + return 0; +} + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/MsgCell.h b/ShiXiSeng_Main/MsgCell.h new file mode 100644 index 0000000..89d848a --- /dev/null +++ b/ShiXiSeng_Main/MsgCell.h @@ -0,0 +1,23 @@ +// +// MsgCell.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface MsgCell : UITableViewCell + +@property (strong, nonatomic) IBOutlet UILabel *jobname; +@property (strong, nonatomic) + IBOutlet UILabel *companyname; +@property (strong, nonatomic) + IBOutlet UILabel *way; +@property (strong, nonatomic) + IBOutlet UILabel *date; +@property (strong, nonatomic) + IBOutlet UILabel *suit; + +@end diff --git a/ShiXiSeng_Main/MsgCell.m b/ShiXiSeng_Main/MsgCell.m new file mode 100644 index 0000000..1530dea --- /dev/null +++ b/ShiXiSeng_Main/MsgCell.m @@ -0,0 +1,23 @@ +// +// MsgCell.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "MsgCell.h" + +@implementation MsgCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ShiXiSeng_Main/MsgCell.xib b/ShiXiSeng_Main/MsgCell.xib new file mode 100644 index 0000000..6132beb --- /dev/null +++ b/ShiXiSeng_Main/MsgCell.xib @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/MsgDetail.h b/ShiXiSeng_Main/MsgDetail.h new file mode 100644 index 0000000..bf50152 --- /dev/null +++ b/ShiXiSeng_Main/MsgDetail.h @@ -0,0 +1,13 @@ +// +// MsgDetail.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface MsgDetail : UIViewController + +@end diff --git a/ShiXiSeng_Main/MsgDetail.m b/ShiXiSeng_Main/MsgDetail.m new file mode 100644 index 0000000..8c81745 --- /dev/null +++ b/ShiXiSeng_Main/MsgDetail.m @@ -0,0 +1,37 @@ +// +// MsgDetail.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "MsgDetail.h" + +@interface MsgDetail () + +@end + +@implementation MsgDetail + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/NewMessage.h b/ShiXiSeng_Main/NewMessage.h new file mode 100644 index 0000000..d5c3459 --- /dev/null +++ b/ShiXiSeng_Main/NewMessage.h @@ -0,0 +1,13 @@ +// +// NewMessage.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface NewMessage : UIViewController + +@end diff --git a/ShiXiSeng_Main/NewMessage.m b/ShiXiSeng_Main/NewMessage.m new file mode 100644 index 0000000..81b3f44 --- /dev/null +++ b/ShiXiSeng_Main/NewMessage.m @@ -0,0 +1,37 @@ +// +// NewMessage.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "NewMessage.h" + +@interface NewMessage () + +@end + +@implementation NewMessage + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/OneDelegate.m b/ShiXiSeng_Main/OneDelegate.m new file mode 100644 index 0000000..894d320 --- /dev/null +++ b/ShiXiSeng_Main/OneDelegate.m @@ -0,0 +1,40 @@ +// +// OneDelegate.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import + +@interface OneDelegate : NSObject + +@end + +@implementation OneDelegate + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/ShiXiSeng_Main/PViewController.h b/ShiXiSeng_Main/PViewController.h new file mode 100644 index 0000000..b9448c9 --- /dev/null +++ b/ShiXiSeng_Main/PViewController.h @@ -0,0 +1,13 @@ +// +// PViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface PViewController : UIViewController + +@end diff --git a/ShiXiSeng_Main/PViewController.m b/ShiXiSeng_Main/PViewController.m new file mode 100644 index 0000000..16145c2 --- /dev/null +++ b/ShiXiSeng_Main/PViewController.m @@ -0,0 +1,43 @@ +// +// PViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "PViewController.h" + +@interface PViewController () + +@end + +@implementation PViewController + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +-(IBAction)pressleftbutton:(id)sender +{ + [self performSegueWithIdentifier:@"Test" sender:self]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Personinfo.h b/ShiXiSeng_Main/Personinfo.h new file mode 100644 index 0000000..9dffb52 --- /dev/null +++ b/ShiXiSeng_Main/Personinfo.h @@ -0,0 +1,28 @@ +// +// Personinfo.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import "Work_Day.h" +#import "CNPPopupController.h" + + +@interface Personinfo : UITableViewController { + NSArray *MenuList; +} +@property (strong, nonatomic) NSString *kind; +@property (strong, nonatomic) IBOutlet UITextField *real_name; +@property (strong, nonatomic) IBOutlet UITextField *email; +@property (strong, nonatomic) IBOutlet UITextField *phone_number; +@property (strong, nonatomic) IBOutlet UIButton *study; +@property (strong, nonatomic) IBOutlet UIButton *chosetime; + +@property int __flag_; + +-(IBAction)save:(id)sender; + +@end diff --git a/ShiXiSeng_Main/Personinfo.m b/ShiXiSeng_Main/Personinfo.m new file mode 100644 index 0000000..0fee8b0 --- /dev/null +++ b/ShiXiSeng_Main/Personinfo.m @@ -0,0 +1,606 @@ +// +// Personinfo.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Personinfo.h" +#import "CNPPopupController.h" +#import "VPImageCropperViewController.h" +#import +#import + +#define ORIGINAL_MAX_WIDTH 640.0f + +@interface Personinfo () + +@property (nonatomic, strong) CNPPopupController *popupController; + +@property (strong, nonatomic) IBOutlet UIButton *sex; +@property (nonatomic, strong) UIImageView *portraitImageView; + + +-(IBAction)pressSex:(id)sender; + + + +@end + +@implementation Personinfo + +// 头像设置 + +- (void)loadPortrait { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ { + NSURL *portraitUrl = [NSURL URLWithString:@"http://photo.l99.com/bigger/31/1363231021567_5zu910.jpg"]; + UIImage *protraitImg = [UIImage imageWithData:[NSData dataWithContentsOfURL:portraitUrl]]; + dispatch_sync(dispatch_get_main_queue(), ^{ + self.portraitImageView.image = protraitImg; + }); + }); +} + +- (void)editPortrait { + UIActionSheet *choiceSheet = [[UIActionSheet alloc] initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"拍照", @"从相册中选取", nil]; + [choiceSheet showInView:self.view]; +} + +#pragma mark VPImageCropperDelegate +- (void)imageCropper:(VPImageCropperViewController *)cropperViewController didFinished:(UIImage *)editedImage { + self.portraitImageView.image = editedImage; + [cropperViewController dismissViewControllerAnimated:YES completion:^{ + // TO DO + }]; +} + +- (void)imageCropperDidCancel:(VPImageCropperViewController *)cropperViewController { + [cropperViewController dismissViewControllerAnimated:YES completion:^{ + }]; +} + +#pragma mark UIActionSheetDelegate +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { + if (buttonIndex == 0) { + // 拍照 + if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]) { + UIImagePickerController *controller = [[UIImagePickerController alloc] init]; + controller.sourceType = UIImagePickerControllerSourceTypeCamera; + if ([self isFrontCameraAvailable]) { + controller.cameraDevice = UIImagePickerControllerCameraDeviceFront; + } + NSMutableArray *mediaTypes = [[NSMutableArray alloc] init]; + [mediaTypes addObject:(__bridge NSString *)kUTTypeImage]; + controller.mediaTypes = mediaTypes; + controller.delegate = self; + [self presentViewController:controller + animated:YES + completion:^(void){ + NSLog(@"Picker View Controller is presented"); + }]; + } + + } else if (buttonIndex == 1) { + // 从相册中选取 + if ([self isPhotoLibraryAvailable]) { + UIImagePickerController *controller = [[UIImagePickerController alloc] init]; + controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + NSMutableArray *mediaTypes = [[NSMutableArray alloc] init]; + [mediaTypes addObject:(__bridge NSString *)kUTTypeImage]; + controller.mediaTypes = mediaTypes; + controller.delegate = self; + [self presentViewController:controller + animated:YES + completion:^(void){ + NSLog(@"Picker View Controller is presented"); + }]; + } + } +} + +#pragma mark - UIImagePickerControllerDelegate +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + [picker dismissViewControllerAnimated:YES completion:^() { + UIImage *portraitImg = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; + portraitImg = [self imageByScalingToMaxSize:portraitImg]; + // 裁剪 + VPImageCropperViewController *imgEditorVC = [[VPImageCropperViewController alloc] initWithImage:portraitImg cropFrame:CGRectMake(0, 100.0f, self.view.frame.size.width, self.view.frame.size.width) limitScaleRatio:3.0]; + imgEditorVC.delegate = self; + [self presentViewController:imgEditorVC animated:YES completion:^{ + // TO DO + }]; + }]; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + [picker dismissViewControllerAnimated:YES completion:^(){ + }]; +} + +#pragma mark - UINavigationControllerDelegate +- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { +} + +- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { + +} + +#pragma mark camera utility +- (BOOL) isCameraAvailable{ + return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; +} + +- (BOOL) isRearCameraAvailable{ + return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]; +} + +- (BOOL) isFrontCameraAvailable { + return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]; +} + +- (BOOL) doesCameraSupportTakingPhotos { + return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera]; +} + +- (BOOL) isPhotoLibraryAvailable{ + return [UIImagePickerController isSourceTypeAvailable: + UIImagePickerControllerSourceTypePhotoLibrary]; +} +- (BOOL) canUserPickVideosFromPhotoLibrary{ + return [self + cameraSupportsMedia:(__bridge NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary]; +} +- (BOOL) canUserPickPhotosFromPhotoLibrary{ + return [self + cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypePhotoLibrary]; +} + +- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{ + __block BOOL result = NO; + if ([paramMediaType length] == 0) { + return NO; + } + NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType]; + [availableMediaTypes enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { + NSString *mediaType = (NSString *)obj; + if ([mediaType isEqualToString:paramMediaType]){ + result = YES; + *stop= YES; + } + }]; + return result; +} + +#pragma mark image scale utility +- (UIImage *)imageByScalingToMaxSize:(UIImage *)sourceImage { + if (sourceImage.size.width < ORIGINAL_MAX_WIDTH) return sourceImage; + CGFloat btWidth = 0.0f; + CGFloat btHeight = 0.0f; + if (sourceImage.size.width > sourceImage.size.height) { + btHeight = ORIGINAL_MAX_WIDTH; + btWidth = sourceImage.size.width * (ORIGINAL_MAX_WIDTH / sourceImage.size.height); + } else { + btWidth = ORIGINAL_MAX_WIDTH; + btHeight = sourceImage.size.height * (ORIGINAL_MAX_WIDTH / sourceImage.size.width); + } + CGSize targetSize = CGSizeMake(btWidth, btHeight); + return [self imageByScalingAndCroppingForSourceImage:sourceImage targetSize:targetSize]; +} + +- (UIImage *)imageByScalingAndCroppingForSourceImage:(UIImage *)sourceImage targetSize:(CGSize)targetSize { + UIImage *newImage = nil; + CGSize imageSize = sourceImage.size; + CGFloat width = imageSize.width; + CGFloat height = imageSize.height; + CGFloat targetWidth = targetSize.width; + CGFloat targetHeight = targetSize.height; + CGFloat scaleFactor = 0.0; + CGFloat scaledWidth = targetWidth; + CGFloat scaledHeight = targetHeight; + CGPoint thumbnailPoint = CGPointMake(0.0,0.0); + if (CGSizeEqualToSize(imageSize, targetSize) == NO) + { + CGFloat widthFactor = targetWidth / width; + CGFloat heightFactor = targetHeight / height; + + if (widthFactor > heightFactor) + scaleFactor = widthFactor; // scale to fit height + else + scaleFactor = heightFactor; // scale to fit width + scaledWidth = width * scaleFactor; + scaledHeight = height * scaleFactor; + + // center the image + if (widthFactor > heightFactor) + { + thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; + } + else + if (widthFactor < heightFactor) + { + thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; + } + } + UIGraphicsBeginImageContext(targetSize); // this will crop + CGRect thumbnailRect = CGRectZero; + thumbnailRect.origin = thumbnailPoint; + thumbnailRect.size.width = scaledWidth; + thumbnailRect.size.height = scaledHeight; + + [sourceImage drawInRect:thumbnailRect]; + + newImage = UIGraphicsGetImageFromCurrentImageContext(); + if(newImage == nil) NSLog(@"could not scale image"); + + //pop the context to get back to the default + UIGraphicsEndImageContext(); + return newImage; +} + +#pragma mark portraitImageView getter +- (UIImageView *)portraitImageView { + if (!_portraitImageView) { + CGFloat w = 40.0f; + CGFloat h = w; + + _portraitImageView = [[UIImageView alloc] initWithFrame:CGRectMake(320, 2, w, h)]; + [_portraitImageView.layer setCornerRadius:(_portraitImageView.frame.size.height/2)]; + [_portraitImageView.layer setMasksToBounds:YES]; + [_portraitImageView setContentMode:UIViewContentModeScaleAspectFill]; + [_portraitImageView setClipsToBounds:YES]; + _portraitImageView.layer.shadowColor = [UIColor blackColor].CGColor; + _portraitImageView.layer.shadowOffset = CGSizeMake(4, 4); + _portraitImageView.layer.shadowOpacity = 0.5; + _portraitImageView.layer.shadowRadius = 2.0; + _portraitImageView.layer.borderColor = [[UIColor blackColor] CGColor]; + _portraitImageView.layer.borderWidth = 2.0f; + _portraitImageView.userInteractionEnabled = YES; + _portraitImageView.backgroundColor = [UIColor blackColor]; + UITapGestureRecognizer *portraitTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(editPortrait)]; + [_portraitImageView addGestureRecognizer:portraitTap]; + } + return _portraitImageView; +} + +-(IBAction)save:(id)sender{ + if ([self validateUserName:self.real_name.text]) { + if ([self validateEmail:self.email.text]) { + if ([self isMobileNumber:self.phone_number.text]) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您!" message:@"保存成功" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写正确的手机号" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写正确的邮箱格式" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写您的真实姓名" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } +} + +-(IBAction)save1:(id)sender{ + if ([self validateUserName:self.real_name.text]) { + if ([self validateEmail:self.email.text]) { + if ([self isMobileNumber:self.phone_number.text]) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您!" message:@"保存成功" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert addButtonWithTitle:@"登录"]; + [alert show]; + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写正确的手机号" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写正确的邮箱格式" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,保存失败!" message:@"请填写您的真实姓名" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + + [alert show]; + } +} +-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + // 点击注册页 + if (buttonIndex == 1) { + + [self performSegueWithIdentifier:@"login" sender:self]; } + +} + +#pragma mark - UIImagePickerControllerDelegate + +-(void)selectImage{ + UIImagePickerController *picker = [[UIImagePickerController alloc] init]; + picker.delegate = self; + picker.allowsEditing = YES; + picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + + [self presentViewController:picker animated:YES completion:nil]; +} +-(IBAction)chosetim:(id)sender{ + ___flag_ = 3; + [_chosetime setTitle:@"请选择" forState:UIControlStateNormal]; + [self showPopupWithStyle1:CNPPopupStyleCentered]; +} +-(void)didSelect:(NSString *)timestring{ + [_chosetime setTitle:timestring forState:UIControlStateNormal]; +} + + +-(IBAction)pressSex:(id)sender{ + [self showPopupWithStyle:CNPPopupStyleCentered Num:0]; +} +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 预期到岗时间" flag:2 buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +- (void)showPopupWithStyle1:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 项目时间" flag:___flag_ buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +// 弹出框的实现(传入弹出风格) +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle Num:(int)num{ + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + NSAttributedString *title1 = [[NSAttributedString alloc] initWithString:@"编辑头像:" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:24], NSParagraphStyleAttributeName : paragraphStyle}]; + UIImage *icon = [UIImage imageNamed:@"头像"]; + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"从图库中选择" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + NSAttributedString *buttonTitle1 = [[NSAttributedString alloc] initWithString:@"拍照" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + NSAttributedString *buttonTitle2 = [[NSAttributedString alloc] initWithString:@"取消" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + NSAttributedString *title2 = [[NSAttributedString alloc] initWithString:@"选择性别:" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:24], NSParagraphStyleAttributeName : paragraphStyle}]; + + NSAttributedString *buttonTitle3 = [[NSAttributedString alloc] initWithString:@"男" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + NSAttributedString *buttonTitle4 = [[NSAttributedString alloc] initWithString:@"女" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + + + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + CNPPopupButtonItem *buttonItem1 = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle1 backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + CNPPopupButtonItem *buttonItem2 = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle2 backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + + CNPPopupButtonItem *buttonItem3 = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle3 backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + CNPPopupButtonItem *buttonItem4 = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle4 backgroundColor:[UIColor colorWithRed:254.0f/255.0f green:147.0f/255.0f blue:65.0f/255.0f alpha:1.0]]; + + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + NSLog(@"Block for button: %@", item.buttonTitle.string); + + }; + if (num == 1) { + // 编辑头像 + self.popupController = [[CNPPopupController alloc] initWithTitle:title1 contents:@[icon] buttonItems:@[buttonItem, buttonItem1, buttonItem2] destructiveButtonItem:nil]; + } + else{ + self.popupController = [[CNPPopupController alloc] initWithTitle:title2 contents:@[icon] buttonItems:@[buttonItem3, buttonItem4] destructiveButtonItem:nil]; + } + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; + +} + +#pragma mark - CNPPopupController Delegate + +- (void)popupController:(CNPPopupController *)controller didDismissWithButtonTitle:(NSString *)title { + if ([title isEqualToString:@"男"]||[title isEqualToString:@"女"]){ + [_sex setTitle:title forState:UIControlStateNormal]; + }else if ([title isEqualToString:@"拍照"]){ + //[self takephoto]; + }else if ([title isEqualToString:@"从图库选择"]){ + [self selectImage]; + } + NSLog(@"Dismissed with button title: %@", title); +} + +- (void)popupControllerDidPresent:(CNPPopupController *)controller { + NSLog(@"Popup controller presented."); +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self.view addSubview:self.portraitImageView]; + [self loadPortrait]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +// 正则表达式验证 + +//利用正则表达式验证姓名 +-(BOOL) validateUserName:(NSString *)name +{ + NSString *userNameRegex = @"^([\u4e00-\u9fa5]+|([a-z]+?)+)$"; + NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex]; + BOOL B = [userNamePredicate evaluateWithObject:name]; + return B; +} +// 验证邮箱 +-(BOOL)validateEmail:(NSString*)email +{ + if((0 != [email rangeOfString:@"@"].length) && + (0 != [email rangeOfString:@"."].length)) + { + NSCharacterSet* tmpInvalidCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; + NSMutableCharacterSet* tmpInvalidMutableCharSet = [tmpInvalidCharSet mutableCopy]; + [tmpInvalidMutableCharSet removeCharactersInString:@"_-"]; + + /* + *使用compare option 来设定比较规则,如 + *NSCaseInsensitiveSearch是不区分大小写 + *NSLiteralSearch 进行完全比较,区分大小写 + *NSNumericSearch 只比较定符串的个数,而不比较字符串的字面值 + */ + NSRange range1 = [email rangeOfString:@"@" + options:NSCaseInsensitiveSearch]; + + //取得用户名部分 + NSString* userNameString = [email substringToIndex:range1.location]; + NSArray* userNameArray = [userNameString componentsSeparatedByString:@"."]; + + for(NSString* string in userNameArray) + { + NSRange rangeOfInavlidChars = [string rangeOfCharacterFromSet: tmpInvalidMutableCharSet]; + if(rangeOfInavlidChars.length != 0 || [string isEqualToString:@""]) + return NO; + } + + //取得域名部分 + NSString *domainString = [email substringFromIndex:range1.location+1]; + NSArray *domainArray = [domainString componentsSeparatedByString:@"."]; + + for(NSString *string in domainArray) + { + NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:tmpInvalidMutableCharSet]; + if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""]) + return NO; + } + + return YES; + } + else { + return NO; + } +} + +/*手机号码验证 MODIFIED BY HELENSONG*/ +- (BOOL)isMobileNumber:(NSString *)mobileNum +{ + + /** + * 手机号码 + * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 + * 联通:130,131,132,152,155,156,185,186 + * 电信:133,1349,153,180,189 + */ + NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"; + /** + 10 * 中国移动:China Mobile + 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 + 12 */ + NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"; + /** + 15 * 中国联通:China Unicom + 16 * 130,131,132,152,155,156,185,186 + 17 */ + NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$"; + /** + 20 * 中国电信:China Telecom + 21 * 133,1349,153,180,189 + 22 */ + NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$"; + /** + 25 * 大陆地区固话及小灵通 + 26 * 区号:010,020,021,022,023,024,025,027,028,029 + 27 * 号码:七位或八位 + 28 */ + // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$"; + + NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE]; + NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM]; + NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU]; + NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT]; + + if (([regextestmobile evaluateWithObject:mobileNum] == YES) + || ([regextestcm evaluateWithObject:mobileNum] == YES) + || ([regextestct evaluateWithObject:mobileNum] == YES) + || ([regextestcu evaluateWithObject:mobileNum] == YES)) + { + return YES; + } + else + { + return NO; + } +} +-(IBAction)pressstudy:(id)sender{ + [_study setTitle:@"学历" forState:UIControlStateNormal]; + /** + * 绑定本地数据(最低学历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath3=[[NSBundle mainBundle]pathForResource:@"lowest_study.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath3]; + _kind = @" 最低学历"; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:ScreenHeight/3 kind:_kind flag:4]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(void)didSelectIndex:(NSInteger)index study:(NSString *)study{ + [_study setTitle:study forState:UIControlStateNormal]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/PooCodeView.h b/ShiXiSeng_Main/PooCodeView.h new file mode 100644 index 0000000..adc02e0 --- /dev/null +++ b/ShiXiSeng_Main/PooCodeView.h @@ -0,0 +1,15 @@ +// +// PooCodeView.h +// Code +// +// Created by crazypoo on 14-4-14. +// Copyright (c) 2014年 crazypoo. All rights reserved. +// + +#import + +@interface PooCodeView : UIView +@property (nonatomic, retain) NSArray *changeArray; +@property (nonatomic, retain) NSMutableString *changeString; +@property (nonatomic, retain) UILabel *codeLabel; +@end diff --git a/ShiXiSeng_Main/PooCodeView.m b/ShiXiSeng_Main/PooCodeView.m new file mode 100644 index 0000000..3c46e15 --- /dev/null +++ b/ShiXiSeng_Main/PooCodeView.m @@ -0,0 +1,96 @@ +// +// PooCodeView.m +// Code +// +// Created by crazypoo on 14-4-14. +// Copyright (c) 2014年 crazypoo. All rights reserved. +// + +#import "PooCodeView.h" + +@implementation PooCodeView +@synthesize changeArray = _changeArray; +@synthesize changeString = _changeString; +@synthesize codeLabel = _codeLabel; + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + + self.layer.cornerRadius = 5.0; + self.layer.masksToBounds = YES; + self.backgroundColor = [UIColor blueColor]; + + [self change]; + } + return self; +} +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + [self change]; + [self setNeedsDisplay]; +} + +- (void)change +{ + self.changeArray = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",nil]; + + NSMutableString *getStr = [[NSMutableString alloc] initWithCapacity:5]; + + self.changeString = [[NSMutableString alloc] initWithCapacity:6]; + for(NSInteger i = 0; i < 4; i++) + { + NSInteger index = arc4random() % ([self.changeArray count] - 1); + getStr = [self.changeArray objectAtIndex:index]; + + self.changeString = (NSMutableString *)[self.changeString stringByAppendingString:getStr]; + } +} + +- (void)drawRect:(CGRect)rect { + [super drawRect:rect]; + + float red = arc4random() % 100 / 100.0; + float green = arc4random() % 100 / 100.0; + float blue = arc4random() % 100 / 100.0; + UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1.0]; + [self setBackgroundColor:color]; + + NSString *text = [NSString stringWithFormat:@"%@",self.changeString]; + CGSize cSize = [@"S" sizeWithFont:[UIFont systemFontOfSize:20]]; + int width = rect.size.width / text.length - cSize.width; + int height = rect.size.height - cSize.height; + CGPoint point; + + float pX, pY; + for (int i = 0; i < text.length; i++) + { + pX = arc4random() % width + rect.size.width / text.length * i; + pY = arc4random() % height; + point = CGPointMake(pX, pY); + unichar c = [text characterAtIndex:i]; + NSString *textC = [NSString stringWithFormat:@"%C", c]; + [textC drawAtPoint:point withFont:[UIFont systemFontOfSize:20]]; + } + + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetLineWidth(context, 1.0); + for(int cout = 0; cout < 10; cout++) + { + red = arc4random() % 100 / 100.0; + green = arc4random() % 100 / 100.0; + blue = arc4random() % 100 / 100.0; + color = [UIColor colorWithRed:red green:green blue:blue alpha:1.0]; + CGContextSetStrokeColorWithColor(context, [color CGColor]); + pX = arc4random() % (int)rect.size.width; + pY = arc4random() % (int)rect.size.height; + CGContextMoveToPoint(context, pX, pY); + pX = arc4random() % (int)rect.size.width; + pY = arc4random() % (int)rect.size.height; + CGContextAddLineToPoint(context, pX, pY); + CGContextStrokePath(context); + } +} +@end diff --git a/ShiXiSeng_Main/PrefixHeader.pch b/ShiXiSeng_Main/PrefixHeader.pch new file mode 100644 index 0000000..ec58b0c --- /dev/null +++ b/ShiXiSeng_Main/PrefixHeader.pch @@ -0,0 +1,20 @@ +// +// PrefixHeader.pch +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/11. +// Copyright (c) 2015年 jackson. All rights reserved. +// +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifndef ShiXiSeng_Main_PrefixHeader_pch +#import +#import +#define ShiXiSeng_Main_PrefixHeader_pch + +// Include any system framework and library headers here that should be included in all compilation units. +// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. + +#endif diff --git a/ShiXiSeng_Main/Project_exp.h b/ShiXiSeng_Main/Project_exp.h new file mode 100644 index 0000000..ff845c1 --- /dev/null +++ b/ShiXiSeng_Main/Project_exp.h @@ -0,0 +1,18 @@ +// +// Project_exp.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "CNPPopupController.h" + +@interface Project_exp : UITableViewController + +@property (nonatomic, strong) IBOutlet UIButton *chosetime1; +@property (nonatomic, strong) IBOutlet UIButton *chosetim2; +@property int _flag_; + +@end diff --git a/ShiXiSeng_Main/Project_exp.m b/ShiXiSeng_Main/Project_exp.m new file mode 100644 index 0000000..d592392 --- /dev/null +++ b/ShiXiSeng_Main/Project_exp.m @@ -0,0 +1,81 @@ + +// +// Project_exp.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "Project_exp.h" + +@interface Project_exp () +@property (nonatomic, strong) CNPPopupController *popupController; +@end + + + +@implementation Project_exp +-(void)didSelect:(NSString *)timestring{ + [_chosetime1 setTitle:timestring forState:UIControlStateNormal]; +} +-(void)didSelect1:(NSString *)timestring{ + [_chosetim2 setTitle:timestring forState:UIControlStateNormal]; +} +-(IBAction)press1:(id)sender{ + __flag_ = 2; + [_chosetime1 setTitle:@"请选择时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +-(IBAction)press2:(id)sender{ + __flag_ = 0; + [_chosetim2 setTitle:@"请选择时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 项目时间" flag:__flag_ buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +-(IBAction)save:(id)sender{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@" 保存成功!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/PwdViewController.h b/ShiXiSeng_Main/PwdViewController.h new file mode 100644 index 0000000..d65b393 --- /dev/null +++ b/ShiXiSeng_Main/PwdViewController.h @@ -0,0 +1,16 @@ +// +// PwdViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface PwdViewController : UIViewController + +-(IBAction)pressleftbutton:(id)sender; + + +@end diff --git a/ShiXiSeng_Main/PwdViewController.m b/ShiXiSeng_Main/PwdViewController.m new file mode 100644 index 0000000..34f66d9 --- /dev/null +++ b/ShiXiSeng_Main/PwdViewController.m @@ -0,0 +1,40 @@ +// +// PwdViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/4. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "PwdViewController.h" + +@interface PwdViewController () + +@end + +@implementation PwdViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +-(IBAction)pressleftbutton:(id)sender{ + [self.navigationController popToRootViewControllerAnimated:true]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/RefuseMsg.h b/ShiXiSeng_Main/RefuseMsg.h new file mode 100644 index 0000000..b0e4b44 --- /dev/null +++ b/ShiXiSeng_Main/RefuseMsg.h @@ -0,0 +1,15 @@ +// +// RefuseMsg.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface RefuseMsg : UITableViewController + + + +@end diff --git a/ShiXiSeng_Main/RefuseMsg.m b/ShiXiSeng_Main/RefuseMsg.m new file mode 100644 index 0000000..8675455 --- /dev/null +++ b/ShiXiSeng_Main/RefuseMsg.m @@ -0,0 +1,124 @@ +// +// RefuseMsg.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "RefuseMsg.h" +#import "MsgCell.h" + +@interface RefuseMsg () + +@end + +@implementation RefuseMsg + +- (void)viewDidLoad { + [super viewDidLoad]; + [self.tableView registerNib:[UINib nibWithNibName:@"MsgCell" bundle:nil] forCellReuseIdentifier:@"MsgCell"]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; + [self.tableView registerNib:[UINib nibWithNibName:@"MsgCell" bundle:nil] forCellReuseIdentifier:@"MsgCell"]; + +} + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return 5; +} +// 设置每一行的内容 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + static NSString *cellIdentifier = @"MsgCell"; + MsgCell *cell = (MsgCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if(cell == nil){ + cell = [MsgCell alloc]; + } + cell.jobname.text = @"工商银行CEO"; + cell.companyname.text = @"工商银行"; + cell.suit.text = @"不合适"; + + return cell; +} +// 为表格建立点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; + [self.navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"company"] animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/RefuseMsg.xib b/ShiXiSeng_Main/RefuseMsg.xib new file mode 100644 index 0000000..5caaece --- /dev/null +++ b/ShiXiSeng_Main/RefuseMsg.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/Register.h b/ShiXiSeng_Main/Register.h new file mode 100644 index 0000000..3839ae5 --- /dev/null +++ b/ShiXiSeng_Main/Register.h @@ -0,0 +1,17 @@ +// +// Register.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface Register : UITableViewController + +@property (nonatomic,strong)IBOutlet UITextField *email; +@property (nonatomic,strong) IBOutlet UITextField *password; +@property (nonatomic,strong) IBOutlet UITextField *code; + +@end diff --git a/ShiXiSeng_Main/Register.m b/ShiXiSeng_Main/Register.m new file mode 100644 index 0000000..127dade --- /dev/null +++ b/ShiXiSeng_Main/Register.m @@ -0,0 +1,214 @@ +// +// Register.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Register.h" +#import "PlayListTableViewController.h" +#import "PooCodeView.h" + +@interface Register () + +@property (nonatomic, retain) PooCodeView *codeView; +-(IBAction)pressReg:(id)sender; +-(IBAction)TeST:(id)sender; + +@end + +@implementation Register + +@synthesize codeView = _codeView; + +-(IBAction)TeST:(id)sender{ + PlayListTableViewController *detailVC = [[PlayListTableViewController alloc]initWithNibName:@"DetailViewController" bundle:nil]; + [self.navigationController pushViewController:detailVC animated:YES]; +} + +// 实现注册方法 +-(IBAction)pressReg:(id)sender{ + + + // 先判断验证码 + if ([self.code.text isEqualToString:self.codeView.changeString]) { + // 再判断邮箱的正则表达式 + if ([self validateEmail:self.email.text]) { + // 确定用户已经填写了密码 + if ([self.password.text isEqualToString:@"请输入登录密码"]||[self.password.text isEqualToString:@""]) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,注册失败!" message:@"请填写您的密码" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } +else{ + //2.设置登录参数 + NSDictionary *dict = @{ @"email":_email.text, @"password":_password.text}; + + NSURL *url=[[NSURL alloc]initWithString:@"http://localhost:75/ShiXiSeng/register.php"]; + + NSError *parseError = nil; + + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&parseError]; + + NSString *js =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + + + NSLog(@"json=%@",js); + NSMutableData *postBody=[NSMutableData data]; + [postBody appendData: [[NSString stringWithFormat: @"json=%@",js] + dataUsingEncoding:NSUTF8StringEncoding]]; + NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:url + cachePolicy:NSURLRequestReloadIgnoringCacheData + timeoutInterval:20.0f]; + [request setHTTPMethod: @"POST"]; + [request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField:@"json"]; + [request setHTTPBody:postBody]; + NSError *error = nil; + NSHTTPURLResponse* urlResponse = nil; + NSData *responseData = [NSURLConnection sendSynchronousRequest:request + returningResponse:&urlResponse error:&error]; + + NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; + NSLog(@"结果:%@",result); + NSData *data = [result dataUsingEncoding:NSUTF8StringEncoding]; + id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + NSDictionary *dictq = (NSDictionary *)json; + + + NSString *Info = [dictq objectForKey:@"result"]; + NSLog(@"%@",Info); + // 判断是否连接服务器 + if (Info == nil) { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,连接失败!" message:@"请确保您的网络已经打开" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + + } + else{ + if([Info isEqualToString:@"exist"]){ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,注册失败!" message:@"您的邮箱已经注册过了" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + } + + else if ([Info isEqualToString:@"success"]) { + + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@"注册成功" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + //[alert addButtonWithTitle:@"登录"]; + + + [alert show]; + + + // 登录成功进入主页 + + // 保存用户的登录信息 + //获取userDefault单例 + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + + //登陆成功后把用户名和密码存储到UserDefault + NSString *username = self.email.text; + NSString *password = self.password.text; + [userDefaults setObject:username forKey:@"name"]; + [userDefaults setObject:password forKey:@"password"]; + [userDefaults synchronize]; + + } + } + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,注册失败!" message:@"您的邮箱格式有误" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + + } + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,注册失败!" message:@"您的验证码输入有误" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; + + } +} + +-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + // 点击注册页 + if (buttonIndex == 1) { + + [self performSegueWithIdentifier:@"Sign" sender:self]; + } + +} +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + // 验证码 + self.codeView = [[PooCodeView alloc] initWithFrame:CGRectMake(295, 124, 80, 40)]; + [self.view addSubview:self.codeView]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +// 验证邮箱 +-(BOOL)validateEmail:(NSString*)email +{ + if((0 != [email rangeOfString:@"@"].length) && + (0 != [email rangeOfString:@"."].length)) + { + NSCharacterSet* tmpInvalidCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; + NSMutableCharacterSet* tmpInvalidMutableCharSet = [tmpInvalidCharSet mutableCopy]; + [tmpInvalidMutableCharSet removeCharactersInString:@"_-"]; + + /* + *使用compare option 来设定比较规则,如 + *NSCaseInsensitiveSearch是不区分大小写 + *NSLiteralSearch 进行完全比较,区分大小写 + *NSNumericSearch 只比较定符串的个数,而不比较字符串的字面值 + */ + NSRange range1 = [email rangeOfString:@"@" + options:NSCaseInsensitiveSearch]; + + //取得用户名部分 + NSString* userNameString = [email substringToIndex:range1.location]; + NSArray* userNameArray = [userNameString componentsSeparatedByString:@"."]; + + for(NSString* string in userNameArray) + { + NSRange rangeOfInavlidChars = [string rangeOfCharacterFromSet: tmpInvalidMutableCharSet]; + if(rangeOfInavlidChars.length != 0 || [string isEqualToString:@""]) + return NO; + } + + //取得域名部分 + NSString *domainString = [email substringFromIndex:range1.location+1]; + NSArray *domainArray = [domainString componentsSeparatedByString:@"."]; + + for(NSString *string in domainArray) + { + NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:tmpInvalidMutableCharSet]; + if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""]) + return NO; + } + + return YES; + } + else { + return NO; + } +} + + + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/Rest.h b/ShiXiSeng_Main/Rest.h new file mode 100644 index 0000000..b01b51c --- /dev/null +++ b/ShiXiSeng_Main/Rest.h @@ -0,0 +1,13 @@ +// +// Rest.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface Rest : UIViewController + +@end diff --git a/ShiXiSeng_Main/Rest.m b/ShiXiSeng_Main/Rest.m new file mode 100644 index 0000000..cc9ec28 --- /dev/null +++ b/ShiXiSeng_Main/Rest.m @@ -0,0 +1,37 @@ +// +// Rest.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "Rest.h" + +@interface Rest () + +@end + +@implementation Rest + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/School_exp.h b/ShiXiSeng_Main/School_exp.h new file mode 100644 index 0000000..6af71aa --- /dev/null +++ b/ShiXiSeng_Main/School_exp.h @@ -0,0 +1,17 @@ +// +// School_exp.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "Work_Day.h" + +@interface School_exp : UITableViewController{ + NSArray *MenuList; +} +@property (strong, nonatomic) NSString *kind; +@property (strong, nonatomic) IBOutlet UIButton *btn; +@end diff --git a/ShiXiSeng_Main/School_exp.m b/ShiXiSeng_Main/School_exp.m new file mode 100644 index 0000000..5fdfccc --- /dev/null +++ b/ShiXiSeng_Main/School_exp.m @@ -0,0 +1,59 @@ +// +// School_exp.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "School_exp.h" + +@interface School_exp () + +@end + +@implementation School_exp + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} +-(IBAction)pop:(id)sender{ + [self.navigationController popoverPresentationController]; +} +-(IBAction)save:(id)sender{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@" 保存成功!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} +-(IBAction)pressKind:(id)sender{ + [_btn setTitle:@"请选择经历" forState:UIControlStateNormal]; + /** + * 绑定本地数据(可实习时间) + */ + // 读取本地资源文件保存数组 + NSString *fullpath5 =[[NSBundle mainBundle]pathForResource:@"school_exp.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath5]; + _kind =@" 请选择经历"; + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:2*ScreenHeight/5 kind:_kind flag:6]; + sheet.delegate = self; + [sheet showInView:self]; +} +-(void)didSelectIndex:(NSInteger)index skill:(NSString *)skill{ + [_btn setTitle:skill forState:UIControlStateNormal]; +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/SignIn.h b/ShiXiSeng_Main/SignIn.h new file mode 100644 index 0000000..83636a6 --- /dev/null +++ b/ShiXiSeng_Main/SignIn.h @@ -0,0 +1,14 @@ +// +// SignIn.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/6. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import +#import "EAIntroView.h" + +@interface SignIn : UIViewController + +@end diff --git a/ShiXiSeng_Main/SignIn.m b/ShiXiSeng_Main/SignIn.m new file mode 100644 index 0000000..7d1001f --- /dev/null +++ b/ShiXiSeng_Main/SignIn.m @@ -0,0 +1,326 @@ +// +// SignIn.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/6. +// Copyright (c) 2015年 jackson. All rights reserved. +// + + +#import "SignIn.h" + +#import "AFNetworking.h" +#import "AFHTTPRequestOperation.h" +#import "AFHTTPSessionManager.h" +#import "JobTable.h" +#import "SampleViewController.h" + +@interface SignIn () + +@property (strong, nonatomic) IBOutlet UITextField *email; +@property (strong ,nonatomic) IBOutlet UITextField *password; + +-(IBAction)signin:(id)sender; + +@end + +@implementation SignIn + +// 设置引导页 +- (void)showIntroWithCrossDissolve { + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + page1.bgImage = [UIImage imageNamed:@"1"]; + + + EAIntroPage *page2 = [EAIntroPage page]; + + page2.desc = @"“找真爱”—实习僧只为你们两的不期而遇"; + page2.bgImage = [UIImage imageNamed:@"2"]; + + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + page3.bgImage = [UIImage imageNamed:@"3"]; + + + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3]]; + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; +} + +- (void)showBasicIntroWithBg { + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + + + EAIntroPage *page2 = [EAIntroPage page]; + + page2.desc = @"“找真爱”—实习僧只为你们两的不期而遇"; + + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + + + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3]]; + + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; +} + +- (void)showBasicIntroWithFixedTitleView { + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + + EAIntroPage *page2 = [EAIntroPage page]; + + page2.desc = @"“找真爱”—实习僧只为你们两的不期而遇"; + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3]]; + UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"original"]]; + intro.titleView = titleView; + intro.backgroundColor = [UIColor colorWithRed:0.0f green:0.49f blue:0.96f alpha:1.0f]; //iOS7 dark blue + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; +} + +- (void)showCustomIntro { + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + + + EAIntroPage *page2 = [EAIntroPage page]; + + page2.titlePositionY = 180; + page2.desc = @"“找真爱”—实习僧只为你们两的不期而遇"; + page2.descPositionY = 160; + + page2.imgPositionY = 70; + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.titleFont = [UIFont fontWithName:@"Georgia-BoldItalic" size:20]; + page3.titlePositionY = 220; + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + page3.descFont = [UIFont fontWithName:@"Georgia-Italic" size:18]; + page3.descPositionY = 200; + + page3.imgPositionY = 100; + + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3]]; + intro.backgroundColor = [UIColor colorWithRed:1.0f green:0.58f blue:0.21f alpha:1.0f]; //iOS7 orange + + intro.pageControlY = 100.0f; + + UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [btn setBackgroundImage:[UIImage imageNamed:@"skipButton"] forState:UIControlStateNormal]; + [btn setFrame:CGRectMake((320-230)/2, [UIScreen mainScreen].bounds.size.height - 60, 230, 40)]; + [btn setTitle:@"SKIP NOW" forState:UIControlStateNormal]; + [btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; + intro.skipButton = btn; + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; +} + +- (void)showIntroWithCustomView { + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + page1.bgImage = [UIImage imageNamed:@"1"]; + + + UIView *viewForPage2 = [[UIView alloc] initWithFrame:self.view.bounds]; + UILabel *labelForPage2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 220, 300, 30)]; + labelForPage2.text = @"Some custom view"; + labelForPage2.font = [UIFont systemFontOfSize:32]; + labelForPage2.textColor = [UIColor whiteColor]; + labelForPage2.backgroundColor = [UIColor clearColor]; + labelForPage2.transform = CGAffineTransformMakeRotation(M_PI_2*3); + [viewForPage2 addSubview:labelForPage2]; + EAIntroPage *page2 = [EAIntroPage pageWithCustomView:viewForPage2]; + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + page3.bgImage = [UIImage imageNamed:@"3"]; + + + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds andPages:@[page1,page2,page3]]; + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; +} + +- (void)showIntroWithSeparatePagesInit { + EAIntroView *intro = [[EAIntroView alloc] initWithFrame:self.view.bounds]; + + [intro setDelegate:self]; + [intro showInView:self.view animateDuration:0.0]; + + EAIntroPage *page1 = [EAIntroPage page]; + + page1.desc = @"新旅程—实习僧带你进入职业生涯"; + page1.bgImage = [UIImage imageNamed:@"1"]; + + + EAIntroPage *page2 = [EAIntroPage page]; + + page2.desc = @"“找真爱”—实习僧只为你们两的不期而遇"; + page2.bgImage = [UIImage imageNamed:@"2"]; + + + EAIntroPage *page3 = [EAIntroPage page]; + + page3.desc = @"携手共进-实习僧带你进入\r\n暑期实习、名企实习、创业公司、NGO"; + page3.bgImage = [UIImage imageNamed:@"3"]; + + + [intro setPages:@[page1,page2,page3]]; +} + +- (void)introDidFinish { + NSLog(@"Intro callback"); +} + +-(IBAction)test:(id)sender{ + SampleViewController *jobt = [[SampleViewController alloc] initWithNibName:@"jacosn" bundle:nil]; + [self addChildViewController:jobt]; +} +// 登录事件 +-(IBAction)signin:(id)sender{ + + + //2.设置登录参数 + NSDictionary *dict = @{ @"username":_email.text, @"password":_password.text}; + + NSURL *url=[[NSURL alloc]initWithString:@"http://localhost:75/ShiXiSeng/login.php"]; + + NSError *parseError = nil; + + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&parseError]; + + NSString *js =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + + + NSLog(@"json=%@",js); + NSMutableData *postBody=[NSMutableData data]; + [postBody appendData: [[NSString stringWithFormat: @"json=%@",js] + dataUsingEncoding:NSUTF8StringEncoding]]; + NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:url + cachePolicy:NSURLRequestReloadIgnoringCacheData + timeoutInterval:20.0f]; + [request setHTTPMethod: @"POST"]; + [request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField:@"json"]; + [request setHTTPBody:postBody]; + NSError *error = nil; + NSHTTPURLResponse* urlResponse = nil; + NSData *responseData = [NSURLConnection sendSynchronousRequest:request + returningResponse:&urlResponse error:&error]; + + NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; + NSLog(@"结果:%@",result); + NSData *data = [result dataUsingEncoding:NSUTF8StringEncoding]; + id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; + NSDictionary *dictq = (NSDictionary *)json; + + + if (result == nil) { + + NSLog(@"请输入密码!"); + } + + NSString *Info = [dictq objectForKey:@"result"]; + NSLog(@"%@",Info); + + if ([Info isEqualToString:@"success"]) { + NSLog(@"Contragulations!"); + // 登录成功进入主页 + [self performSegueWithIdentifier:@"home" sender:self]; + // 保存用户的登录信息 + //获取userDefault单例 + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + + //登陆成功后把用户名和密码存储到UserDefault + NSString *username = self.email.text; + NSString *password = self.password.text; + [userDefaults setObject:username forKey:@"name"]; + [userDefaults setObject:password forKey:@"password"]; + [userDefaults synchronize]; + + } + else{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"对不起,登录失败!" message:@"您的帐号或密码错误" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + + [alert addButtonWithTitle:@"注册"]; + [alert show]; + NSLog(@"登录失败!"); + } + + +} +-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + // 点击注册页 + if (buttonIndex == 1) { + + [self performSegueWithIdentifier:@"register" sender:self]; } + +} +//+ (NSString*)dictionaryToJson:(NSDictionary *)dic +// +//{ +// +// NSError *parseError = nil; +// +// NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError]; +// +// return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; +// +//} +- (void)viewDidLoad { + + + [super viewDidLoad]; + NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; + if([userDefaults objectForKey:@"FirstLoad"] == nil) { + [userDefaults setBool:NO forKey:@"FirstLoad"]; + //显示引导页 + [self showIntroWithCrossDissolve]; + NSLog(@"用户已经登录"); + } + // Do any additional setup after loading the view. + +} + + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/TESTTableViewController.h b/ShiXiSeng_Main/TESTTableViewController.h new file mode 100644 index 0000000..aaf7ae1 --- /dev/null +++ b/ShiXiSeng_Main/TESTTableViewController.h @@ -0,0 +1,15 @@ +// +// TESTTableViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface TESTTableViewController : UITableViewController + +@property (strong,nonatomic) IBOutlet UITableView *viewTest; + +@end diff --git a/ShiXiSeng_Main/TESTTableViewController.m b/ShiXiSeng_Main/TESTTableViewController.m new file mode 100644 index 0000000..3de3107 --- /dev/null +++ b/ShiXiSeng_Main/TESTTableViewController.m @@ -0,0 +1,184 @@ +// +// TESTTableViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "TESTTableViewController.h" +#import "JobCell.h" +#import "SDCycleScrollView.h" + +@interface TESTTableViewController () + +// 用来保存数据的数组 +@property(nonatomic,strong)NSArray *job; + +@end + +@implementation TESTTableViewController + +- (void)viewDidLoad { + self.viewTest.delegate = self; + self.viewTest.dataSource = self; + [super viewDidLoad]; + //[self advtisement]; + + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"Job.plist" ofType:nil]; + + self.job = [NSArray arrayWithContentsOfFile:fullpath]; + NSLog(@"%@", self.job); + NSLog(@"load!"); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + NSLog(@"test"); + + return 1; + } + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + //long int te = self.job.count; + //NSLog(@"%@", te); + return self.job.count; +} + +//-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +//{ +// static NSString *identifier=@"JOB"; +// JobCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; +// +// //如果没有取到就新建 +// if (cell==nil) { +// cell=[[JobCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; +// NSLog(@"null"); +// } +// NSLog(@"tuyiiyiyi"); +// NSUInteger row = [indexPath row]; +// NSDictionary *rowDict = [self.job objectAtIndex:row]; +// +// // 本地绑定数据 +// NSString *imagePath = [rowDict objectForKey:@"icon"]; +// imagePath = [imagePath stringByAppendingString:@".png"]; +// cell.companyIcon.image = [UIImage imageNamed:imagePath]; +// +// cell.date.text = [rowDict objectForKey:@"date"]; +// cell.salary.text = [rowDict objectForKey:@"salary"]; +// cell.workday.text = [rowDict objectForKey:@"workday"]; +// cell.location.text = [rowDict objectForKey:@"location"]; +// cell.companyName.text = [rowDict objectForKey:@"company"]; +// cell.job.text = [rowDict objectForKey:@""]; +// +// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; +// return cell; +// +//} +// 动态广告 +-(void)advtisement{ + // 采用本地图片实现 + NSArray *images = @[[UIImage imageNamed:@"image0.png"], + [UIImage imageNamed:@"image1.png"], + [UIImage imageNamed:@"image2.png"], + [UIImage imageNamed:@"image3.png"] + ]; + + CGFloat w = self.view.bounds.size.width; + + // 本地加载 --- 创建不带标题的图片轮5器 + SDCycleScrollView *cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 60, w, 120) imagesGroup:images]; + cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentRight; + //cycleScrollView.delegate = self; + [self.view addSubview:cycleScrollView]; + // --- 轮播时间间隔,默认1.0秒,可自定义 + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + NSLog(@"dadsdas"); + return 60; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + JobCell *cell = [tableView dequeueReusableCellWithIdentifier:@"JOB"forIndexPath:indexPath]; + + NSLog(@"tuyiiyiyi"); + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [self.job objectAtIndex:row]; + + // 本地绑定数据 + NSString *imagePath = [rowDict objectForKey:@"icon"]; + imagePath = [imagePath stringByAppendingString:@".png"]; + cell.companyIcon.image = [UIImage imageNamed:imagePath]; + + cell.date.text = [rowDict objectForKey:@"date"]; + cell.salary.text = [rowDict objectForKey:@"salary"]; + cell.workday.text = [rowDict objectForKey:@"workday"]; + cell.location.text = [rowDict objectForKey:@"location"]; + cell.companyName.text = [rowDict objectForKey:@"company"]; + cell.job.text = [rowDict objectForKey:@"job"]; + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + // Configure the cell... + + return cell; +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/TestController.h b/ShiXiSeng_Main/TestController.h new file mode 100644 index 0000000..e891c80 --- /dev/null +++ b/ShiXiSeng_Main/TestController.h @@ -0,0 +1,13 @@ +// +// TestController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface TestController : UIViewController + +@end diff --git a/ShiXiSeng_Main/TestController.m b/ShiXiSeng_Main/TestController.m new file mode 100644 index 0000000..db770d0 --- /dev/null +++ b/ShiXiSeng_Main/TestController.m @@ -0,0 +1,80 @@ +// +// TestController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/8. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "TestController.h" +#import "JobCell.h" + +@interface TestController () + +@property(nonatomic,strong)NSArray *job; + +@end + +@implementation TestController + +- (void)viewDidLoad { + + [super viewDidLoad]; + // Do any additional setup after loading the view. + // 读取本地资源文件保存数组 + NSBundle *bundle = [NSBundle mainBundle]; + NSString *plistPath = [bundle pathForResource:@"job" ofType:@"plist"]; + self.job = [[NSArray alloc] initWithContentsOfFile:plistPath]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + + return self.job.count; +} + +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *identifier=@"jobCells"; + JobCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [self.job objectAtIndex:row]; + + // 本地绑定数据 + NSString *imagePath = [rowDict objectForKey:@"icon"]; + imagePath = [imagePath stringByAppendingString:@".png"]; + cell.companyIcon.image = [UIImage imageNamed:imagePath]; + + cell.date.text = [rowDict objectForKey:@"date"]; + cell.salary.text = [rowDict objectForKey:@"salary"]; + cell.workday.text = [rowDict objectForKey:@"workday"]; + cell.location.text = [rowDict objectForKey:@"location"]; + cell.companyName.text = [rowDict objectForKey:@"company"]; + cell.job.text = [rowDict objectForKey:@""]; + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + return cell; + +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/TestViewController.h b/ShiXiSeng_Main/TestViewController.h new file mode 100644 index 0000000..56c389d --- /dev/null +++ b/ShiXiSeng_Main/TestViewController.h @@ -0,0 +1,16 @@ +// +// TestViewController.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface TestViewController : UIViewController + +// 测试NavigationBar之间的循环跳转 +-(IBAction)pressleftbutton:(id)sender; + +@end diff --git a/ShiXiSeng_Main/TestViewController.m b/ShiXiSeng_Main/TestViewController.m new file mode 100644 index 0000000..c351449 --- /dev/null +++ b/ShiXiSeng_Main/TestViewController.m @@ -0,0 +1,40 @@ +// +// TestViewController.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/3. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "TestViewController.h" + +@interface TestViewController () + +@end + +@implementation TestViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} +-(IBAction)pressleftbutton:(id)sender +{ + [self.navigationController popViewControllerAnimated:YES]; +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/ViewController.h b/ShiXiSeng_Main/ViewController.h index 44b534d..e85faac 100644 --- a/ShiXiSeng_Main/ViewController.h +++ b/ShiXiSeng_Main/ViewController.h @@ -8,6 +8,9 @@ #import + + + @interface ViewController : UIViewController diff --git a/ShiXiSeng_Main/Work_Day.h b/ShiXiSeng_Main/Work_Day.h new file mode 100644 index 0000000..8e8b44f --- /dev/null +++ b/ShiXiSeng_Main/Work_Day.h @@ -0,0 +1,38 @@ +// +// Work_Day.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#import "work_cell.h" + +@protocol WorkDayDelegate +@optional + +-(void)didSelectIndex:(NSInteger)index days:(NSString*)days; +-(void)didSelectIndex:(NSInteger)index money:(NSString*)money; +-(void)didSelectIndex:(NSInteger)index cycle:(NSString*)cycle; +-(void)didSelectIndex:(NSInteger)index study:(NSString *)study; +-(void)didSelectIndex:(NSInteger)index workday:(NSString *)workday; +-(void)didSelectIndex:(NSInteger)index skill:(NSString *)skill; + + +@end + +@interface Work_Day : UIView{ + NSArray *workday; + UILabel *title; + UITableView *view; +} + +-(id)initWithlist:(NSArray *)list height:(CGFloat)height kind:(NSString*)kind flag:(int)flag; +- (void)showInView:(UIViewController *)Sview; +@property(nonatomic,assign) id delegate; +@property (strong, nonatomic) NSMutableArray *title_table; +@property (strong, nonatomic) NSString *msg; +@property int flag_; + +@end diff --git a/ShiXiSeng_Main/Work_Day.m b/ShiXiSeng_Main/Work_Day.m new file mode 100644 index 0000000..affbd5b --- /dev/null +++ b/ShiXiSeng_Main/Work_Day.m @@ -0,0 +1,217 @@ +// +// Work_Day.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "Work_Day.h" +#import "work_cell.h" + +@implementation Work_Day +/** + * 初始化方法 + * + * @param frame <#frame description#> + * + * @return <#return value description#> + */ +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} +/** + * 程序调用入口 + * + * @param list <#list description#> + * @param height <#height description#> + * + * @return <#return value description#> + */ +-(id)initWithlist:(NSArray *)list height:(CGFloat)height kind:(NSString*)kind flag:(int)flag{ + _title_table = [[NSMutableArray alloc] init]; + + _flag_ = flag; + + + /** + * 实质上在传值的时候会有 + workday = list(解析json所得到的数组) + 在这里使用本地数据,所以只传已经从本地读完数据的的array + */ + + + + workday = list; + + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:kind]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + /** + 装入具体信息的table + */ + view = [[UITableView alloc]initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, height) style:UITableViewStylePlain]; + view.scrollEnabled = YES; + view.dataSource = self; + view.delegate = self; + + [self addSubview:title]; + [self addSubview:view]; + [self animeData]; + } + return self; +} +/** + * 弹出动画 + */ +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-title.frame.size.height)-(view.frame.size.height)-40, title.frame.size.width, title.frame.size.height)]; + [view setFrame:CGRectMake(view.frame.origin.x, ScreenHeight-view.frame.size.height-40, view.frame.size.width, view.frame.size.height)]; + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [view setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + //[view addSubview:self]; + [Sview.view addSubview:self]; + } +} + + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return workday.count; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSUInteger row = [indexPath row]; + NSDictionary *rowDict = [workday objectAtIndex:row]; + + static NSString *CellIdentifier = @"Cell"; + work_cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + [cell setcell:0.]; + if(cell==nil){ + cell = [[work_cell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + [cell setcell:0.]; + } + + cell.InfoLabel.text = [rowDict objectForKey:@"data"]; + [_title_table addObject:cell.InfoLabel.text]; + // Configure the cell... + return cell; +} +/** + * 设置每一行的高度 + * + * @param tableView <#tableView description#> + * @param indexPath <#indexPath description#> + * + * @return <#return value description#> + */ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 45.; +} +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + work_cell * cell = (work_cell *)[tableView cellForRowAtIndexPath:indexPath]; + + NSLog(@"%@",cell.InfoLabel.text); + if (_flag_ == 1) { + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: days:)]){ + [_delegate didSelectIndex:indexPath.row days:cell.InfoLabel.text]; + return; + } + }else if (_flag_ == 3){ + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: cycle:)]){ + [_delegate didSelectIndex:indexPath.row cycle:cell.InfoLabel.text]; + return; + } + }else if (_flag_ == 4){ + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: study:)]){ + [_delegate didSelectIndex:indexPath.row study:cell.InfoLabel.text]; + return; + } + }else if (_flag_ == 5){ + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: workday:)]){ + [_delegate didSelectIndex:indexPath.row workday:cell.InfoLabel.text]; + return; + } + + }else if (_flag_ == 6){ + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: skill:)]){ + [_delegate didSelectIndex:indexPath.row skill:cell.InfoLabel.text]; + return; + } + + } + else { + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: money:)]){ + [_delegate didSelectIndex:indexPath.row money:cell.InfoLabel.text]; + return; + } + + } +} + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/ShiXiSeng_Main/com.h b/ShiXiSeng_Main/com.h new file mode 100644 index 0000000..d43e028 --- /dev/null +++ b/ShiXiSeng_Main/com.h @@ -0,0 +1,53 @@ +// +// com.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@class DAContextMenuCell; + +@protocol DAContextMenuCellDelegate1 + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell; +- (void)contextMenuDidHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuDidShowInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillShowInCell:(DAContextMenuCell *)cell; +- (BOOL)shouldShowMenuOptionsViewInCell:(DAContextMenuCell *)cell; +@optional +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell; + +@end + + +@interface com : UITableViewCell + +@property (strong, nonatomic) IBOutlet UIImageView *comIcon; +@property (strong, nonatomic) IBOutlet UILabel *comName; +@property (strong, nonatomic) IBOutlet UILabel *detail; +@property (strong, nonatomic) IBOutlet UIButton *fix; +// 设置一个参数控制颜色和fix.title的变化 +@property int temp; +-(IBAction)pressFix:(id)sender; + + +@property (strong, nonatomic) IBOutlet UIView *actualContentView; + +@property (readonly, assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (strong, nonatomic) NSString *deleteButtonTitle; +@property (assign, nonatomic) BOOL editable; +@property (assign, nonatomic) CGFloat menuOptionButtonTitlePadding; +@property (assign, nonatomic) CGFloat menuOptionsAnimationDuration; +@property (assign, nonatomic) CGFloat bounceValue; +@property (strong, nonatomic) NSString *moreOptionsButtonTitle; + +@property (weak, nonatomic) id delegate; + +- (CGFloat)contextMenuWidth; +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler; + +@end diff --git a/ShiXiSeng_Main/com.m b/ShiXiSeng_Main/com.m new file mode 100644 index 0000000..b13adf5 --- /dev/null +++ b/ShiXiSeng_Main/com.m @@ -0,0 +1,276 @@ +// +// com.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "com.h" + +@interface com() + +@property (strong, nonatomic) UIView *contextMenuView; +//@property (strong, nonatomic) UIButton *moreOptionsButton; +@property (strong, nonatomic) UIButton *deleteButton; +@property (assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (assign, nonatomic) BOOL shouldDisplayContextMenuView; +@property (assign, nonatomic) CGFloat initialTouchPositionX; +@end + +@implementation com + + + +-(IBAction)pressFix:(id)sender{ + if ([_fix.titleLabel.text isEqualToString:@"已关注"]) { + + [_fix setTitle:@"未关注" forState:UIControlStateNormal]; + + }else{ + + [_fix setTitle:@"已关注" forState:UIControlStateNormal]; + + } +} +#pragma mark - Initialization + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self setUp]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self setUp]; +} +- (void)setUp +{ + self.contextMenuView = [[UIView alloc] initWithFrame:self.actualContentView.bounds]; + self.contextMenuView.backgroundColor = self.contentView.backgroundColor; + [self.contentView insertSubview:self.contextMenuView belowSubview:self.actualContentView]; + self.contextMenuHidden = self.contextMenuView.hidden = YES; + self.shouldDisplayContextMenuView = NO; + self.editable = YES; + // self.moreOptionsButtonTitle = @"More"; + //self.deleteButtonTitle = @"Delete"; + [self .deleteButton setImage:[UIImage imageNamed:@"io"] forState:UIControlStateNormal]; + self.menuOptionButtonTitlePadding = 25.; + self.menuOptionsAnimationDuration = 0.3; + self.bounceValue = 30.; + UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; + panRecognizer.delegate = self; + [self addGestureRecognizer:panRecognizer]; + [self setNeedsLayout]; +} +#pragma mark - Public + +- (CGFloat)contextMenuWidth +{ + return CGRectGetWidth(self.deleteButton.frame); +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + self.contextMenuView.frame = self.actualContentView.bounds; + [self.contentView sendSubviewToBack:self.contextMenuView]; + [self.contentView bringSubviewToFront:self.actualContentView]; + + CGFloat height = CGRectGetHeight(self.bounds); + CGFloat width = CGRectGetWidth(self.bounds); + CGFloat menuOptionButtonWidth = [self menuOptionButtonWidth]; + // self.moreOptionsButton.frame = CGRectMake(width - menuOptionButtonWidth - CGRectGetWidth(self.deleteButton.frame), 0., menuOptionButtonWidth, height); + self.deleteButton.frame = CGRectMake(width - menuOptionButtonWidth, 0., menuOptionButtonWidth, height); +} + +- (CGFloat)menuOptionButtonWidth +{ + CGFloat width = roundf(50+ 2. * self.menuOptionButtonTitlePadding); + width = MIN(width, CGRectGetWidth(self.bounds) / 2. - 10.); + if ((NSInteger)width % 2) { + width += 1.; + } + return width; +} + +- (void)setDeleteButtonTitle:(NSString *)deleteButtonTitle +{ + _deleteButtonTitle = deleteButtonTitle; + [self.deleteButton setTitle:deleteButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setEditable:(BOOL)editable +{ + if (_editable != editable) { + _editable = editable; + [self setNeedsLayout]; + } +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setHighlighted:highlighted animated:animated]; + } +} + +- (void)setMenuOptionButtonTitlePadding:(CGFloat)menuOptionButtonTitlePadding +{ + if (_menuOptionButtonTitlePadding != menuOptionButtonTitlePadding) { + _menuOptionButtonTitlePadding = menuOptionButtonTitlePadding; + [self setNeedsLayout]; + } +} + +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler +{ + if (self.selected) { + [self setSelected:NO animated:NO]; + } + CGRect frame = CGRectMake((hidden) ? 0 : -[self contextMenuWidth], 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + [UIView animateWithDuration:(animated) ? self.menuOptionsAnimationDuration : 0. + delay:0. + options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut + animations:^ + { + self.actualContentView.frame = frame; + } completion:^(BOOL finished) { + self.contextMenuHidden = hidden; + self.shouldDisplayContextMenuView = !hidden; + if (!hidden) { + [self.delegate contextMenuDidShowInCell: (id)self]; + } else { + [self.delegate contextMenuDidHideInCell: (id)self]; + } + if (completionHandler) { + completionHandler(); + } + }]; +} + +- (void)setMoreOptionsButtonTitle:(NSString *)moreOptionsButtonTitle +{ + _moreOptionsButtonTitle = moreOptionsButtonTitle; + // [self.moreOptionsButton setTitle:self.moreOptionsButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setSelected:selected animated:animated]; + } +} + +#pragma mark - Private + +- (void)handlePan:(UIPanGestureRecognizer *)recognizer; +{ + if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + UIPanGestureRecognizer *panRecognizer = (UIPanGestureRecognizer *)recognizer; + + CGPoint currentTouchPoint = [panRecognizer locationInView:self.contentView]; + CGFloat currentTouchPositionX = currentTouchPoint.x; + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.initialTouchPositionX = currentTouchPositionX; + if (velocity.x > 0) { + [self.delegate contextMenuWillHideInCell:(id)self]; + } else { + [self.delegate contextMenuDidShowInCell:(id)self]; + } + } else if (recognizer.state == UIGestureRecognizerStateChanged) { + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (!self.contextMenuHidden || (velocity.x > 0. || [self.delegate shouldShowMenuOptionsViewInCell:(id)self])) { + if (self.selected) { + [self setSelected:NO animated:NO]; + } + self.contextMenuView.hidden = NO; + CGFloat panAmount = currentTouchPositionX - self.initialTouchPositionX; + self.initialTouchPositionX = currentTouchPositionX; + CGFloat minOriginX = -[self contextMenuWidth] - self.bounceValue; + CGFloat maxOriginX = 0.; + CGFloat originX = CGRectGetMinX(self.actualContentView.frame) + panAmount; + originX = MIN(maxOriginX, originX); + originX = MAX(minOriginX, originX); + + + if ((originX < -0.5 * [self contextMenuWidth] && velocity.x < 0.) || velocity.x < -100) { + self.shouldDisplayContextMenuView = YES; + } else if ((originX > -0.3 * [self contextMenuWidth] && velocity.x > 0.) || velocity.x > 100) { + self.shouldDisplayContextMenuView = NO; + } + self.actualContentView.frame = CGRectMake(originX, 0., CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + } + } else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) { + [self setMenuOptionsViewHidden:!self.shouldDisplayContextMenuView animated:YES completionHandler:nil]; + } + } +} + +- (void)deleteButtonTapped +{ + if ([self.delegate respondsToSelector:@selector(contextMenuCellDidSelectDeleteOption:)]) { + [self.delegate contextMenuCellDidSelectDeleteOption:(id)self]; + } +} + + + +- (void)prepareForReuse +{ + [super prepareForReuse]; + [self setMenuOptionsViewHidden:YES animated:NO completionHandler:nil]; +} + +#pragma mark * UIPanGestureRecognizer delegate + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer +{ + if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self]; + return fabs(translation.x) > fabs(translation.y); + } + return YES; +} + +#pragma mark * Lazy getters + +//- (UIButton *)moreOptionsButton +//{ +// if (!_moreOptionsButton) { +// CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); +// _moreOptionsButton = [[UIButton alloc] initWithFrame:frame]; +// _moreOptionsButton.backgroundColor = [UIColor lightGrayColor]; +// [self.contextMenuView addSubview:_moreOptionsButton]; +// [_moreOptionsButton addTarget:self action:@selector(moreButtonTapped) forControlEvents:UIControlEventTouchUpInside]; +// } +// return _moreOptionsButton; +//} + +- (UIButton *)deleteButton +{ + if (self.editable) { + if (!_deleteButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _deleteButton = [[UIButton alloc] initWithFrame:frame]; + _deleteButton.backgroundColor = [UIColor colorWithRed:251./255. green:34./255. blue:38./255. alpha:1.]; + [self.contextMenuView addSubview:_deleteButton]; + [_deleteButton addTarget:self action:@selector(deleteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _deleteButton; + } + return nil; +} + + +@end diff --git a/ShiXiSeng_Main/job_sub_content.h b/ShiXiSeng_Main/job_sub_content.h new file mode 100644 index 0000000..acf8045 --- /dev/null +++ b/ShiXiSeng_Main/job_sub_content.h @@ -0,0 +1,32 @@ +// +// job_sub_content.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/19/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "Work_Day.h" +#import "test.h" +#import "DownSheet.h" +#import "industry.h" + +@interface job_sub_content : UITableViewController +{ + NSArray *MenuList; + + +} + +@property (strong, nonatomic) IBOutlet UIButton *cycle; +@property (strong, nonatomic) + IBOutlet UIButton *kind; +@property (strong, nonatomic) + IBOutlet UIButton *location; +@property (strong, nonatomic) +IBOutlet UIButton *industry; +@property (strong, nonatomic) +NSString *kind1; + +@end diff --git a/ShiXiSeng_Main/job_sub_content.m b/ShiXiSeng_Main/job_sub_content.m new file mode 100644 index 0000000..1c8f812 --- /dev/null +++ b/ShiXiSeng_Main/job_sub_content.m @@ -0,0 +1,94 @@ +// +// job_sub_content.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/19/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "job_sub_content.h" + +@interface job_sub_content () + +@end + +@implementation job_sub_content + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} +-(IBAction)pressIndustry:(id)sender{ + [_industry setTitle:@"行业领域(必填)" forState:UIControlStateNormal]; + industry *sheet = [[industry alloc]initWithlist:0]; + [sheet showInView:self]; +} +-(IBAction)presslocation:(id)sender{ + [_location setTitle:@"工作地点(必填)" forState:UIControlStateNormal]; + test *sheet = [[test alloc]initWithlist:0]; + sheet.delegate = self; + [sheet showInView:self]; +} +-(IBAction)presskind:(id)sender{ + [_kind setTitle:@"职业类别(必填)" forState:UIControlStateNormal]; + /** + * 绑定本地数据(发送周期) + */ + // 读取本地资源文件保存数组 + MenuList = [[NSArray alloc]init]; + DownSheet *sheet = [[DownSheet alloc]initWithlist:MenuList height:0]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(IBAction)presscycle:(id)sender{ + [_cycle setTitle:@"发送周期(必填)" forState:UIControlStateNormal]; + /** + * 绑定本地数据(发送周期) + */ + // 读取本地资源文件保存数组 + NSString *fullpath4=[[NSBundle mainBundle]pathForResource:@"send_cycle.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath4]; + _kind1 =@" 发送周期"; + + Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList height:ScreenHeight/4 kind:_kind1 flag:3]; + sheet.delegate = self; + [sheet showInView:self]; + +} +-(void)didSelect:(NSString *)industry{ + [_industry setTitle:industry forState:UIControlStateNormal]; +} +-(void)didSelectIndex:(NSInteger)index cycle:(NSString *)cycle{ + + + [_cycle setTitle:cycle forState:UIControlStateNormal]; + +} +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + [_kind setTitle:text forState:UIControlStateNormal]; +} +-(void)didSelectIndex:(NSInteger)index city:(NSString*)city{ + + [_location setTitle:city forState:UIControlStateNormal]; + +} +-(void)didSelectIndex:(NSInteger)index industry:(NSString *)industry{ + [_industry setTitle:industry forState:UIControlStateNormal]; +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/jobcollect_cell.h b/ShiXiSeng_Main/jobcollect_cell.h new file mode 100644 index 0000000..f581a43 --- /dev/null +++ b/ShiXiSeng_Main/jobcollect_cell.h @@ -0,0 +1,43 @@ +// +// jobcollect_cell.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import + +@class DAContextMenuCell; + +@protocol DAContextMenuCellDelegate + +- (void)contextMenuCellDidSelectMoreOption:(DAContextMenuCell *)cell; +- (void)contextMenuDidHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuDidShowInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillHideInCell:(DAContextMenuCell *)cell; +- (void)contextMenuWillShowInCell:(DAContextMenuCell *)cell; +- (BOOL)shouldShowMenuOptionsViewInCell:(DAContextMenuCell *)cell; +@optional +- (void)contextMenuCellDidSelectDeleteOption:(DAContextMenuCell *)cell; + +@end + +@interface jobcollect_cell : UITableViewCell + +@property (strong, nonatomic) IBOutlet UIView *actualContentView; + +@property (readonly, assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (strong, nonatomic) NSString *deleteButtonTitle; +@property (assign, nonatomic) BOOL editable; +@property (assign, nonatomic) CGFloat menuOptionButtonTitlePadding; +@property (assign, nonatomic) CGFloat menuOptionsAnimationDuration; +@property (assign, nonatomic) CGFloat bounceValue; +@property (strong, nonatomic) NSString *moreOptionsButtonTitle; + +@property (weak, nonatomic) id delegate; + +- (CGFloat)contextMenuWidth; +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler; + +@end diff --git a/ShiXiSeng_Main/jobcollect_cell.m b/ShiXiSeng_Main/jobcollect_cell.m new file mode 100644 index 0000000..e741886 --- /dev/null +++ b/ShiXiSeng_Main/jobcollect_cell.m @@ -0,0 +1,251 @@ +// +// jobcollect_cell.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "jobcollect_cell.h" + +@interface jobcollect_cell () + +@property (strong, nonatomic) UIView *contextMenuView; +@property (strong, nonatomic) UIButton *deleteButton; +@property (assign, nonatomic, getter = isContextMenuHidden) BOOL contextMenuHidden; +@property (assign, nonatomic) BOOL shouldDisplayContextMenuView; +@property (assign, nonatomic) CGFloat initialTouchPositionX; + + +@end + + +@implementation jobcollect_cell +#pragma mark - Initialization + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self setUp]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self setUp]; +} + +- (void)setUp +{ + self.contextMenuView = [[UIView alloc] initWithFrame:self.actualContentView.bounds]; + self.contextMenuView.backgroundColor = self.contentView.backgroundColor; + [self.contentView insertSubview:self.contextMenuView belowSubview:self.actualContentView]; + self.contextMenuHidden = self.contextMenuView.hidden = YES; + self.shouldDisplayContextMenuView = NO; + self.editable = YES; + + self.deleteButtonTitle = @"删除"; + self.menuOptionButtonTitlePadding = 25.; + self.menuOptionsAnimationDuration = 0.3; + self.bounceValue = 30.; + UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; + panRecognizer.delegate = self; + [self addGestureRecognizer:panRecognizer]; + [self setNeedsLayout]; +} + +#pragma mark - Public + +- (CGFloat)contextMenuWidth +{ + return CGRectGetWidth(self.deleteButton.frame); +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + self.contextMenuView.frame = self.actualContentView.bounds; + [self.contentView sendSubviewToBack:self.contextMenuView]; + [self.contentView bringSubviewToFront:self.actualContentView]; + + CGFloat height = CGRectGetHeight(self.bounds); + CGFloat width = CGRectGetWidth(self.bounds); + CGFloat menuOptionButtonWidth = [self menuOptionButtonWidth]; + self.deleteButton.frame = CGRectMake(width - menuOptionButtonWidth, 0., menuOptionButtonWidth, height); +} + +- (CGFloat)menuOptionButtonWidth +{ + + CGFloat width = 120; + width = MIN(width, CGRectGetWidth(self.bounds) / 2. - 10.); + if ((NSInteger)width % 2) { + width += 1.; + } + return width; +} + +- (void)setDeleteButtonTitle:(NSString *)deleteButtonTitle +{ + _deleteButtonTitle = deleteButtonTitle; + [self.deleteButton setTitle:deleteButtonTitle forState:UIControlStateNormal]; + [self setNeedsLayout]; +} + +- (void)setEditable:(BOOL)editable +{ + if (_editable != editable) { + _editable = editable; + [self setNeedsLayout]; + } +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setHighlighted:highlighted animated:animated]; + } +} + +- (void)setMenuOptionButtonTitlePadding:(CGFloat)menuOptionButtonTitlePadding +{ + if (_menuOptionButtonTitlePadding != menuOptionButtonTitlePadding) { + _menuOptionButtonTitlePadding = menuOptionButtonTitlePadding; + [self setNeedsLayout]; + } +} + +- (void)setMenuOptionsViewHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler +{ + if (self.selected) { + [self setSelected:NO animated:NO]; + } + CGRect frame = CGRectMake((hidden) ? 0 : -[self contextMenuWidth], 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + [UIView animateWithDuration:(animated) ? self.menuOptionsAnimationDuration : 0. + delay:0. + options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut + animations:^ + { + self.actualContentView.frame = frame; + } completion:^(BOOL finished) { + self.contextMenuHidden = hidden; + self.shouldDisplayContextMenuView = !hidden; + if (!hidden) { + [self.delegate contextMenuDidShowInCell:(id)self]; + } else { + [self.delegate contextMenuDidHideInCell:(id)self]; + } + if (completionHandler) { + completionHandler(); + } + }]; +} + + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + if (self.contextMenuHidden) { + self.contextMenuView.hidden = YES; + [super setSelected:selected animated:animated]; + } +} + +#pragma mark - Private + +- (void)handlePan:(UIPanGestureRecognizer *)recognizer; +{ + if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + UIPanGestureRecognizer *panRecognizer = (UIPanGestureRecognizer *)recognizer; + + CGPoint currentTouchPoint = [panRecognizer locationInView:self.contentView]; + CGFloat currentTouchPositionX = currentTouchPoint.x; + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (recognizer.state == UIGestureRecognizerStateBegan) { + self.initialTouchPositionX = currentTouchPositionX; + if (velocity.x > 0) { + [self.delegate contextMenuWillHideInCell:(id)self]; + } else { + [self.delegate contextMenuDidShowInCell:(id)self]; + } + } else if (recognizer.state == UIGestureRecognizerStateChanged) { + CGPoint velocity = [recognizer velocityInView:self.contentView]; + if (!self.contextMenuHidden || (velocity.x > 0. || [self.delegate shouldShowMenuOptionsViewInCell:(id)self])) { + if (self.selected) { + [self setSelected:NO animated:NO]; + } + self.contextMenuView.hidden = NO; + CGFloat panAmount = currentTouchPositionX - self.initialTouchPositionX; + self.initialTouchPositionX = currentTouchPositionX; + CGFloat minOriginX = -[self contextMenuWidth] - self.bounceValue; + CGFloat maxOriginX = 0.; + CGFloat originX = CGRectGetMinX(self.actualContentView.frame) + panAmount; + originX = MIN(maxOriginX, originX); + originX = MAX(minOriginX, originX); + + + if ((originX < -0.5 * [self contextMenuWidth] && velocity.x < 0.) || velocity.x < -100) { + self.shouldDisplayContextMenuView = YES; + } else if ((originX > -0.3 * [self contextMenuWidth] && velocity.x > 0.) || velocity.x > 100) { + self.shouldDisplayContextMenuView = NO; + } + self.actualContentView.frame = CGRectMake(originX, 0., CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)); + } + } else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled) { + [self setMenuOptionsViewHidden:!self.shouldDisplayContextMenuView animated:YES completionHandler:nil]; + } + } +} + +- (void)deleteButtonTapped +{ + if ([self.delegate respondsToSelector:@selector(contextMenuCellDidSelectDeleteOption:)]) { + [self.delegate contextMenuCellDidSelectDeleteOption:(id)self]; + } +} + +- (void)moreButtonTapped +{ + [self.delegate contextMenuCellDidSelectMoreOption:(id)self]; +} + +- (void)prepareForReuse +{ + [super prepareForReuse]; + [self setMenuOptionsViewHidden:YES animated:NO completionHandler:nil]; +} + +#pragma mark * Lazy getters + + + +- (UIButton *)deleteButton +{ + if (self.editable) { + if (!_deleteButton) { + CGRect frame = CGRectMake(0., 0., 100., CGRectGetHeight(self.actualContentView.frame)); + _deleteButton = [[UIButton alloc] initWithFrame:frame]; + _deleteButton.backgroundColor = [UIColor colorWithRed:251./255. green:34./255. blue:38./255. alpha:1.]; + [self.contextMenuView addSubview:_deleteButton]; + [_deleteButton addTarget:self action:@selector(deleteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; + } + return _deleteButton; + } + return nil; +} + +#pragma mark * UIPanGestureRecognizer delegate + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer +{ + if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { + CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self]; + return fabs(translation.x) > fabs(translation.y); + } + return YES; +} +@end diff --git a/ShiXiSeng_Main/lookMsg.h b/ShiXiSeng_Main/lookMsg.h new file mode 100644 index 0000000..8be9203 --- /dev/null +++ b/ShiXiSeng_Main/lookMsg.h @@ -0,0 +1,13 @@ +// +// lookMsg.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface lookMsg : UITableViewController + +@end diff --git a/ShiXiSeng_Main/lookMsg.m b/ShiXiSeng_Main/lookMsg.m new file mode 100644 index 0000000..8d41dc6 --- /dev/null +++ b/ShiXiSeng_Main/lookMsg.m @@ -0,0 +1,124 @@ +// +// lookMsg.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "lookMsg.h" +#import "MsgCell.h" + +@interface lookMsg () + +@end + +@implementation lookMsg + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; + [self.tableView registerNib:[UINib nibWithNibName:@"MsgCell" bundle:nil] forCellReuseIdentifier:@"MsgCell"]; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + return 5; +} +// 设置每一行的内容 +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"MsgCell"; + MsgCell *cell = (MsgCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + + cell.jobname.text = @"中国银行CEO"; + cell.companyname.text = @"中国银行"; + cell.suit.text = @"被查看"; + + return cell; +} +// 为表格建立点击事件 +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; + [self.navigationController pushViewController:[storyboard instantiateViewControllerWithIdentifier:@"company"] animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 80; +} + +/* +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath]; + + // Configure the cell... + + return cell; +} +*/ + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/lookMsg.xib b/ShiXiSeng_Main/lookMsg.xib new file mode 100644 index 0000000..5821852 --- /dev/null +++ b/ShiXiSeng_Main/lookMsg.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ShiXiSeng_Main/position.h b/ShiXiSeng_Main/position.h new file mode 100644 index 0000000..5cca848 --- /dev/null +++ b/ShiXiSeng_Main/position.h @@ -0,0 +1,18 @@ +// +// position.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import + +@interface position : UITableViewCell + +@property (strong, nonatomic) IBOutlet UILabel *companyname; +@property (strong, nonatomic) IBOutlet UILabel *workdays; +@property (strong, nonatomic) IBOutlet UILabel *date; +@property (strong, nonatomic) IBOutlet UILabel *salary; + +@end diff --git a/ShiXiSeng_Main/position.m b/ShiXiSeng_Main/position.m new file mode 100644 index 0000000..e6646b0 --- /dev/null +++ b/ShiXiSeng_Main/position.m @@ -0,0 +1,23 @@ +// +// position.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 15/5/9. +// Copyright (c) 2015年 jackson. All rights reserved. +// + +#import "position.h" + +@implementation position + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ShiXiSeng_Main/salary_range.plist b/ShiXiSeng_Main/salary_range.plist new file mode 100644 index 0000000..3108946 --- /dev/null +++ b/ShiXiSeng_Main/salary_range.plist @@ -0,0 +1,30 @@ + + + + + + data + 50以下 + + + data + 50-100 + + + data + 100-150 + + + data + 150-200 + + + data + 200-300 + + + data + 300以上 + + + diff --git a/ShiXiSeng_Main/work_cell.h b/ShiXiSeng_Main/work_cell.h new file mode 100644 index 0000000..ac4b9e6 --- /dev/null +++ b/ShiXiSeng_Main/work_cell.h @@ -0,0 +1,26 @@ +// +// work_cell.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface work_cell : UITableViewCell +{ + UIView *backgroundView; +} + +@property (strong, nonatomic) UILabel *InfoLabel; + +-(void)setcell:(CGFloat)x; + +@end diff --git a/ShiXiSeng_Main/work_cell.m b/ShiXiSeng_Main/work_cell.m new file mode 100644 index 0000000..9994d69 --- /dev/null +++ b/ShiXiSeng_Main/work_cell.m @@ -0,0 +1,54 @@ +// +// work_cell.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "work_cell.h" + +@implementation work_cell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + + _InfoLabel = [[UILabel alloc]init]; + _InfoLabel.backgroundColor = [UIColor clearColor]; + _InfoLabel.font = [UIFont systemFontOfSize:12]; + [_InfoLabel setTextColor:[UIColor colorWithRed:153.0/255 green:153.0/255 blue:153.0/255 alpha:1.0f]]; + [self.contentView addSubview:_InfoLabel]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + } + return self; +} + +-(void)setcell:(CGFloat)x{ + _InfoLabel.frame = CGRectMake(x, 0, 140, 40); +} + +-(void)layoutSubviews{ + [super layoutSubviews]; + + _InfoLabel.frame = CGRectMake(15, 0, 140, 45); +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + if(selected){ + _InfoLabel.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; + }else{ + self.backgroundColor = [UIColor whiteColor]; + + _InfoLabel.textColor = [UIColor blackColor]; + } +} + + +@end diff --git a/ShiXiSeng_Main/work_days.plist b/ShiXiSeng_Main/work_days.plist new file mode 100644 index 0000000..c19220b --- /dev/null +++ b/ShiXiSeng_Main/work_days.plist @@ -0,0 +1,22 @@ + + + + + + data + 2天 + + + data + 3天 + + + data + 4天 + + + data + 5天 + + + diff --git a/ShiXiSeng_Main/work_exp.h b/ShiXiSeng_Main/work_exp.h new file mode 100644 index 0000000..7d93e81 --- /dev/null +++ b/ShiXiSeng_Main/work_exp.h @@ -0,0 +1,17 @@ +// +// work_exp.h +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import +#import "CNPPopupController.h" +@interface work_exp : UITableViewController + +@property (nonatomic, strong) IBOutlet UIButton *chosetime00; +@property (nonatomic, strong) IBOutlet UIButton *chosetim11; +@property int _flag_; + +@end diff --git a/ShiXiSeng_Main/work_exp.m b/ShiXiSeng_Main/work_exp.m new file mode 100644 index 0000000..f8a713d --- /dev/null +++ b/ShiXiSeng_Main/work_exp.m @@ -0,0 +1,83 @@ +// +// work_exp.m +// ShiXiSeng_Main +// +// Created by 是 撒 on 5/20/15. +// Copyright (c) 2015 jackson. All rights reserved. +// + +#import "work_exp.h" + +@interface work_exp () +@property (nonatomic, strong) CNPPopupController *popupController; +@end + +@implementation work_exp +-(IBAction)pop:(id)sender{ + [self.navigationController popoverPresentationController]; +} +-(void)didSelect:(NSString *)timestring{ + [_chosetime00 setTitle:timestring forState:UIControlStateNormal]; +} +-(void)didSelect1:(NSString *)timestring{ + [_chosetim11 setTitle:timestring forState:UIControlStateNormal]; +} + +-(IBAction)save:(id)sender{ + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"恭喜您" message:@" 保存成功!" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil]; + [alert show]; +} + +-(IBAction)press1:(id)sender{ + __flag_ = 2; + [_chosetime00 setTitle:@"入职时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +-(IBAction)press2:(id)sender{ + __flag_ = 0; + [_chosetim11 setTitle:@"到职时间" forState:UIControlStateNormal]; + [self showPopupWithStyle:CNPPopupStyleCentered]; +} +- (void)showPopupWithStyle:(CNPPopupStyle)popupStyle { + + NSMutableParagraphStyle *paragraphStyle = NSMutableParagraphStyle.new; + paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; + paragraphStyle.alignment = NSTextAlignmentCenter; + + + + NSAttributedString *buttonTitle = [[NSAttributedString alloc] initWithString:@"保存" attributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor], NSParagraphStyleAttributeName : paragraphStyle}]; + + CNPPopupButtonItem *buttonItem = [CNPPopupButtonItem defaultButtonItemWithTitle:buttonTitle backgroundColor:[UIColor colorWithRed:0.46 green:0.8 blue:1.0 alpha:1.0]]; + buttonItem.selectionHandler = ^(CNPPopupButtonItem *item){ + }; + + self.popupController = [[CNPPopupController alloc] initWithTitle:@" 项目时间" flag:__flag_ buttonItems:@[buttonItem] destructiveButtonItem:nil]; + self.popupController.theme = [CNPPopupTheme defaultTheme]; + self.popupController.theme.popupStyle = popupStyle; + self.popupController.delegate = self; + self.popupController.theme.presentationStyle = CNPPopupPresentationStyleSlideInFromBottom; + [self.popupController presentPopupControllerAnimated:YES]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ShiXiSeng_Main/work_time.plist b/ShiXiSeng_Main/work_time.plist new file mode 100644 index 0000000..f4924af --- /dev/null +++ b/ShiXiSeng_Main/work_time.plist @@ -0,0 +1,22 @@ + + + + + + data + 1个月 + + + data + 2个月 + + + data + 3个月 + + + data + 3个月以上 + + + diff --git a/ShiXiSeng_Main/workday.h b/ShiXiSeng_Main/workday.h new file mode 100644 index 0000000..3e83542 --- /dev/null +++ b/ShiXiSeng_Main/workday.h @@ -0,0 +1,31 @@ +// +// workday.h +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import +#import "Work_Day.h" + +@interface workday : UIViewController{ + NSArray *MenuList; + NSArray *MenuList1; + NSArray *MenuList2; + NSArray *MenuList3; + NSArray *Menulist4; + NSArray *MenuList5; + +} + +@property (strong, nonatomic) NSString *kind1; +@property (strong, nonatomic) NSString *kind2; +@property (strong, nonatomic) NSString *kind3; +@property (strong, nonatomic) NSString *kind4; +@property (strong, nonatomic) NSString *kind5; +@property (strong, nonatomic) NSString *kind6; + +@property (strong, nonatomic) NSString *kind7; + +@end diff --git a/ShiXiSeng_Main/workday.m b/ShiXiSeng_Main/workday.m new file mode 100644 index 0000000..e14121d --- /dev/null +++ b/ShiXiSeng_Main/workday.m @@ -0,0 +1,133 @@ +// +// workday.m +// DownSheet +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 wolf. All rights reserved. +// + +#import "workday.h" + +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + +@interface workday () + +@property (strong, nonatomic) UIButton *button; + +@end + +@implementation workday + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self initDemoData]; + + + + _button = [[UIButton alloc]initWithFrame:CGRectMake(50, 50, 210, 100)]; + [_button setTitle:@"弹出菜单演示" forState:UIControlStateNormal]; + [_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [_button addTarget:self action:@selector(clickMenu) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_button]; + +} +-(void)initDemoData{ + + MenuList = [[NSArray alloc]init]; + /** + * 绑定本地数据(每周实习天数) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"work_days.plist" ofType:nil]; + MenuList = [NSArray arrayWithContentsOfFile:fullpath]; + _kind1 = @" 每周实习天数"; + /** + * 绑定本地数据(日薪) + */ + // 读取本地资源文件保存数组 + NSString *fullpath1=[[NSBundle mainBundle]pathForResource:@"salary_range.plist" ofType:nil]; + MenuList1 = [NSArray arrayWithContentsOfFile:fullpath1]; + _kind2 =@" 日薪范围"; + /** + * 绑定本地数据(最低学历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath3=[[NSBundle mainBundle]pathForResource:@"lowest_study.plist" ofType:nil]; + MenuList2 = [NSArray arrayWithContentsOfFile:fullpath3]; + _kind3 =@" 最低学历"; + /** + * 绑定本地数据(发送周期) + */ + // 读取本地资源文件保存数组 + NSString *fullpath4=[[NSBundle mainBundle]pathForResource:@"send_cycle.plist" ofType:nil]; + MenuList3 = [NSArray arrayWithContentsOfFile:fullpath4]; + _kind4 =@" 发送周期"; + /** + * 绑定本地数据(可实习时间) + */ + // 读取本地资源文件保存数组 + NSString *fullpath5 =[[NSBundle mainBundle]pathForResource:@"work_time.plist" ofType:nil]; + Menulist4 = [NSArray arrayWithContentsOfFile:fullpath5]; + _kind5 =@" 可实习时间"; + /** + * 绑定本地数据(校园经历) + */ + // 读取本地资源文件保存数组 + NSString *fullpath6 =[[NSBundle mainBundle]pathForResource:@"school_exp.plist" ofType:nil]; + MenuList5 = [NSArray arrayWithContentsOfFile:fullpath6]; + _kind6 =@" 可实习时间"; + +} + +-(void)clickMenu{ +// Work_Day *sheet = [[Work_Day alloc]initWithlist:MenuList5 height:ScreenHeight/3 kind:_kind6]; +// sheet.delegate = self; +// [sheet showInView:nil]; + /** + email在使用的时候会出现挡住屏幕 + */ +// Receive_email *sheet = [[Receive_email alloc]initWithlist:ScreenHeight/5 kind:_kind4]; +// [sheet showInView:nil]; + _kind7 = @" 出生日期"; + time_window *sheet = [[time_window alloc] initWithlist:_kind7]; + [sheet showInView:nil]; + +} + +-(void)didSelectIndex:(NSInteger)index text:(NSString *)text{ + + + + [_button setTitle:text forState:UIControlStateNormal]; + +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git "a/ShiXiSeng_Main/\344\270\255\345\233\275\347\247\221\345\255\246\351\231\242.png" "b/ShiXiSeng_Main/\344\270\255\345\233\275\347\247\221\345\255\246\351\231\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..0e7c8b82927259847544620c23e73440514c0815 GIT binary patch literal 6180 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 T`Eu8A00000NkvXXu0mjf-dn_I literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/\345\230\200\345\227\222\346\270\205\345\215\225.png" "b/ShiXiSeng_Main/\345\230\200\345\227\222\346\270\205\345\215\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..68069870449663126ac75d51d8e87f849d767236 GIT binary patch literal 5612 zcmVKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z3mHj7K~#9!?3&w?9MyftKc{cgJ@=j2*_qjkW@j(DtRyQ4p`^ed49H-+?8G+MNx3SO zr~D;($a9j1RHZ^vxfNATr4mdCabaQu0vn7FLP%m)vsY;~yF2&kndy7yVHFiJD`16I z4le&*=3)BuoNu3VzTfZf+anei7ejsnN&zUB%U@^^OG`^g{D#zTf$T~7HbHLKgU`5H^RW#{b9eG)#=%^dp7k}k7mcFH*m;jV$4nDh#A_>gF+8)^EK>+ zXYtz?5sHo)`oA6^t**uLdW-W{Hkn_oQ>}IBnhv#gpZg9L_|xy)&;EVcolxL6-o>u` zGl98?GW-C_=vNW4ac_ZmUcl-`n;-vTkvGq+QELwn0^){7Jg#9FDxByZ{5QLol@H+qU())Z+*&=2{I9M9yOS3uVrgDsAYY; z%6w)n_tt-mxA;Tw`-FZUC3^z3_!vTs-&;X^WY^CA?k}zx4q$ zFM-oUEB_&K{$Ye1`3TJ}<5d0;uW=3$$r5@dQfdx$;+u#_=H7ZO&kLAeZO|Kd94rkp zSx9W(By|+6^bA6Y;x*pKzWmp?YtIw9?QNPJ)Nq!b!@K?ygqB3$BP5MT`5ENI%-!op zK5I3*7S&o0RT7j6Dbn%nCoaXt&?dh}(7A$dt`YRta6bGSMBpIjPvNe=jC1wB5VDRC z8ll@k8-EHV|7DPrk7zvjey}|;S=u`wX5Yc=J47Nf*|dHOQ;OsiTKRhnF8&olQV9J% z_R_y1HqH>*4J2ex4MMMv6fdEbpFyaxTYZ{oF~3?z2#Ndl7m#JKH(Sf~16)5qQ57^r zzU4b16y*FVl)@>(z(pu=2rPp3WkRP3YMjusLDo=8zmG^vf9&T!T&?pL&%Mpx{>NFa z*UY^;Ba#qEk{}EMg7D+5zEGp+Q-6e95QLIINIIc!g9uTw_oIzHxuXp+2QFsc zCh$Z0mc4gCBASd5k#QU!bKvf9g+Ro{Q74~9Xi4y`8%iBOXdy*M(I&sYy;?hzHSh>S zh()#An#{WbB$G5q#|aqUm=AgB(7X-veoSEc%6_9B9qUcjz5Xe5=eR$b>f?-fW)I5O8EB$1A@yxV%*3@^YPtLTcwH6fL67{4sLwI6}xs z=`SI)q1)d3@^YQaOErdvq8ypY?b=u;@g z(?~}C6Ks#k&(5yU>{=X~8R0-FyZ2rzZfKl3F-dtW&081N`O&NMv`w2kt#;4mN3YHE z_Jwt(#?m}`Vv@L_?L82HWBc=b?V%YoP3FZj3%v09JT23@qdxzI*XDWg%mS(=^VEYg z9NVA2cm0SWNj!eCOs&=D-(UHVAHIBvZr|bS56+Ow#E2*|k|b{19^0PJR-?y@uV3M% zH!E1S#~*y<0FR$6BTLe~0|Jmq7<}i^L-=0EOK)7^`Jc{HS!wX_{Uzqg!;I&XD6)jO zacaXb#Pb5KZg#l1RO7XGR`_7Ch9tqa9^TJ)A3a1SY25J^{aii!NG8S)zIK#+HpYu* z7C3)pgUYoAeI(?Y#?SXdg3w1%WJZP(96yxjk^4$ajixbn zsTn(^@pmPlGjx@?a*nZ)1W!CL#ll*hmFpeqodLc6HlxL&5wb~xQZdQwM3!78N-Cz` zY1XiJNuv;uj_ai3I;CQY-oV9jJX~)(`cxGeT~mk|Dw-j(3wj8=XG7rl4yosv=_!YzCG~ zJQ^VkLu|)qtJxzSRWWpxXhcQ7VcVG2G*EU|jMg(6E7bBRxEe{Tz4_{u37v>0vspLMG?~iPI$O;imhEDD9tTP}5U_l`$@N-?Oe)Hm z_f`=iMAuXr-2qGMO_K2lx~A;zjJU3cEF{Wf86*L@OpNh-ig;XSwlqvK5vAR=7#WK5 z-N%pe^y5c~8xb~}CNul8JpIHGo;W#6OxJGqEro0X%koLbb&^qyWK1Wbs+c_oKL}`> zHX(w!={)I#P8h(k{Y6wEQE!^qj<@@*rKt)LO`=*efsomWEZx4%YPH2=aR^xww9NtQ zTOI!AtqLvEA~zIcZmPi5%{D97T3o7Z^5x@`WReE!TOHOm+PIF-M#Cf?({a3jMyHSO z2gs6yEXgQ}gdz!|x`N|sL^K&qQ;=2pw%h6xS0o%~~?Bnos9?SEQB*D!15c`TrJkRI< zVvO97PSVg=t#)X1EIPdbYt=TYEHgTsz=$ZjUy*_BQdz6B(J+ZdRn|AVB%(UU4veCy z3O&muqADcgI@xrL%37TxGerat60%wEF_SRJ4aKOn`Yc~-qN)-RO~G<}I;M>zZ>KVv zD$_P?u5ET1*d7Rh*>|vPkCtf>04voNxpa)eaAJ2rHtHtl7p^lllEQX;f*>TStGHoE zqur<89#ATzkY$OsY0)xmP98}S1|Z84mlwA%dp4>fv%KD2mzUtfual(h9Q0sVD@FECx#IsL>Ajrzxy+y$dt!2OiyH4tF}nRb@D?A zyddC0rHbu%#BP|qbX;d7yUkVt2tz0iCvPSp>12et=@CYA2|A|5;c}kx_z)MbY%o63 zB@v4dGc=~hGXz11>jfmD8ohzbk?A}_+RjrWnzDQM>v}$67^0~Pot}*%3!=JqL$tc| zEtip@IPs{4>ji8!O$GxONfLN|Kr*H?oQ|R>5{~C@H%ua=-*<@`8nPs4w)-@1kVGOH z`IW%j$Mb`mLiuU#_paFZUw8fXPc{EKLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0Y^zhK~#9!%#@)^L_rY7e5GJpvoPJOhHHCNK%?`TmTg zujIn^daMJR9`Qc#;;J=CN5B5dlD2>=&sko?^&+y==8)%eC;B;m>Nf32-j?*%(K>|C ob!J&Mm}S{wif!rNckJ&003>;jyRwSoS^xk507*qoM6N<$g25i&&Hw-a literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/\346\227\245\345\216\206.png" "b/ShiXiSeng_Main/\346\227\245\345\216\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..9a1b5d0d7a196555e8967a8515ec04bd4d4b5153 GIT binary patch literal 3122 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 M07*qoM6N<$f}|qt4gdfE literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/\347\210\261\345\245\207\350\211\272.png" "b/ShiXiSeng_Main/\347\210\261\345\245\207\350\211\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..0bdb132ba1979520decb0592531b1861714d871d GIT binary patch literal 7475 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 literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/\347\231\276\350\257\215\346\226\251.png" "b/ShiXiSeng_Main/\347\231\276\350\257\215\346\226\251.png" new file mode 100644 index 0000000000000000000000000000000000000000..2d01619c31072d725d15a7dc31a0a0ae32cb84c1 GIT binary patch literal 4105 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 Hu0mjf^T)Zu literal 0 HcmV?d00001 diff --git "a/ShiXiSeng_Main/\350\201\224\346\203\263.png" "b/ShiXiSeng_Main/\350\201\224\346\203\263.png" new file mode 100644 index 0000000000000000000000000000000000000000..b6b3905ad194e5c8da2544046a6ac5c87a5a1155 GIT binary patch literal 3947 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 FV1m1;eq;au literal 0 HcmV?d00001 diff --git a/TAAbstractDotView.h b/TAAbstractDotView.h new file mode 100755 index 0000000..bcf91f3 --- /dev/null +++ b/TAAbstractDotView.h @@ -0,0 +1,24 @@ +// +// TAAbstractDotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import + + +@interface TAAbstractDotView : UIView + + +/** + * A method call let view know which state appearance it should take. Active meaning it's current page. Inactive not the current page. + * + * @param active BOOL to tell if view is active or not + */ +- (void)changeActivityState:(BOOL)active; + + +@end + diff --git a/TAAbstractDotView.m b/TAAbstractDotView.m new file mode 100755 index 0000000..d39c4b5 --- /dev/null +++ b/TAAbstractDotView.m @@ -0,0 +1,30 @@ +// +// TAAbstractDotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + + +@implementation TAAbstractDotView + + +- (id)init +{ + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] + userInfo:nil]; +} + + +- (void)changeActivityState:(BOOL)active +{ + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:[NSString stringWithFormat:@"You must override %@ in %@", NSStringFromSelector(_cmd), self.class] + userInfo:nil]; +} + +@end diff --git a/TAAnimatedDotView.h b/TAAnimatedDotView.h new file mode 100755 index 0000000..7214e06 --- /dev/null +++ b/TAAnimatedDotView.h @@ -0,0 +1,15 @@ +// +// TAAnimatedDotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + +@interface TAAnimatedDotView : TAAbstractDotView + +@property (nonatomic, strong) UIColor *dotColor; + +@end diff --git a/TAAnimatedDotView.m b/TAAnimatedDotView.m new file mode 100755 index 0000000..e6202bb --- /dev/null +++ b/TAAnimatedDotView.m @@ -0,0 +1,88 @@ +// +// TAAnimatedDotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAnimatedDotView.h" + +static CGFloat const kAnimateDuration = 1; + +@implementation TAAnimatedDotView + +- (instancetype)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + +- (void)setDotColor:(UIColor *)dotColor +{ + _dotColor = dotColor; + self.layer.borderColor = dotColor.CGColor; +} + +- (void)initialization +{ + _dotColor = [UIColor whiteColor]; + self.backgroundColor = [UIColor clearColor]; + self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; + self.layer.borderColor = [UIColor whiteColor].CGColor; + self.layer.borderWidth = 2; +} + + +- (void)changeActivityState:(BOOL)active +{ + if (active) { + [self animateToActiveState]; + } else { + [self animateToDeactiveState]; + } +} + + +- (void)animateToActiveState +{ + [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:.5 initialSpringVelocity:-20 options:UIViewAnimationOptionCurveLinear animations:^{ + self.backgroundColor = _dotColor; + self.transform = CGAffineTransformMakeScale(1.4, 1.4); + } completion:nil]; +} + +- (void)animateToDeactiveState +{ + [UIView animateWithDuration:kAnimateDuration delay:0 usingSpringWithDamping:.5 initialSpringVelocity:0 options:UIViewAnimationOptionCurveLinear animations:^{ + self.backgroundColor = [UIColor clearColor]; + self.transform = CGAffineTransformIdentity; + } completion:nil]; +} + +@end diff --git a/TADotView.h b/TADotView.h new file mode 100755 index 0000000..cf984cc --- /dev/null +++ b/TADotView.h @@ -0,0 +1,13 @@ +// +// TADotView.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAAbstractDotView.h" + +@interface TADotView : TAAbstractDotView + +@end diff --git a/TADotView.m b/TADotView.m new file mode 100755 index 0000000..092170a --- /dev/null +++ b/TADotView.m @@ -0,0 +1,63 @@ +// +// TADotView.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-22. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TADotView.h" + +@implementation TADotView + + +- (instancetype)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + +- (void)initialization +{ + self.backgroundColor = [UIColor clearColor]; + self.layer.cornerRadius = CGRectGetWidth(self.frame) / 2; + self.layer.borderColor = [UIColor whiteColor].CGColor; + self.layer.borderWidth = 2; +} + + +- (void)changeActivityState:(BOOL)active +{ + if (active) { + self.backgroundColor = [UIColor whiteColor]; + } else { + self.backgroundColor = [UIColor clearColor]; + } +} + +@end diff --git a/TAPageControl.h b/TAPageControl.h new file mode 100755 index 0000000..366ff47 --- /dev/null +++ b/TAPageControl.h @@ -0,0 +1,106 @@ +// +// TAPageControl.h +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-21. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import + +@protocol TAPageControlDelegate; + + +@interface TAPageControl : UIControl + + +/** + * Dot view customization properties + */ + +/** + * The Class of your custom UIView, make sure to respect the TAAbstractDotView class. + */ +@property (nonatomic) Class dotViewClass; + + +/** + * UIImage to represent a dot. + */ +@property (nonatomic) UIImage *dotImage; + + +/** + * UIImage to represent current page dot. + */ +@property (nonatomic) UIImage *currentDotImage; + + +/** + * Dot size for dot views. Default is 8 by 8. + */ +@property (nonatomic) CGSize dotSize; + + +@property (nonatomic, strong) UIColor *dotColor; + +/** + * Spacing between two dot views. Default is 8. + */ +@property (nonatomic) NSInteger spacingBetweenDots; + + +/** + * Page control setup properties + */ + + +/** + * Delegate for TAPageControl + */ +@property(nonatomic,assign) id delegate; + + +/** + * Number of pages for control. Default is 0. + */ +@property (nonatomic) NSInteger numberOfPages; + + +/** + * Current page on which control is active. Default is 0. + */ +@property (nonatomic) NSInteger currentPage; + + +/** + * Hide the control if there is only one page. Default is NO. + */ +@property (nonatomic) BOOL hidesForSinglePage; + + +/** + * Let the control know if should grow bigger by keeping center, or just get longer (right side expanding). By default YES. + */ +@property (nonatomic) BOOL shouldResizeFromCenter; + + +/** + * Return the minimum size required to display control properly for the given page count. + * + * @param pageCount Number of dots that will require display + * + * @return The CGSize being the minimum size required. + */ +- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount; + + +@end + + +@protocol TAPageControlDelegate + +@optional +- (void)TAPageControl:(TAPageControl *)pageControl didSelectPageAtIndex:(NSInteger)index; + +@end diff --git a/TAPageControl.m b/TAPageControl.m new file mode 100755 index 0000000..4475517 --- /dev/null +++ b/TAPageControl.m @@ -0,0 +1,364 @@ +// +// TAPageControl.m +// TAPageControl +// +// Created by Tanguy Aladenise on 2015-01-21. +// Copyright (c) 2015 Tanguy Aladenise. All rights reserved. +// + +#import "TAPageControl.h" +#import "TAAbstractDotView.h" +#import "TAAnimatedDotView.h" +#import "TADotView.h" + +/** + * Default number of pages for initialization + */ +static NSInteger const kDefaultNumberOfPages = 0; + +/** + * Default current page for initialization + */ +static NSInteger const kDefaultCurrentPage = 0; + +/** + * Default setting for hide for single page feature. For initialization + */ +static BOOL const kDefaultHideForSinglePage = NO; + +/** + * Default setting for shouldResizeFromCenter. For initialiation + */ +static BOOL const kDefaultShouldResizeFromCenter = YES; + +/** + * Default spacing between dots + */ +static NSInteger const kDefaultSpacingBetweenDots = 8; + +/** + * Default dot size + */ +static CGSize const kDefaultDotSize = {8, 8}; + + +@interface TAPageControl() + + +/** + * Array of dot views for reusability and touch events. + */ +@property (strong, nonatomic) NSMutableArray *dots; + + +@end + +@implementation TAPageControl + + +#pragma mark - Lifecycle + + +- (id)init +{ + self = [super init]; + if (self) { + [self initialization]; + } + + return self; +} + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self initialization]; + } + return self; +} + + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) { + [self initialization]; + } + + return self; +} + + +/** + * Default setup when initiating control + */ +- (void)initialization +{ + self.dotViewClass = [TAAnimatedDotView class]; + self.spacingBetweenDots = kDefaultSpacingBetweenDots; + self.numberOfPages = kDefaultNumberOfPages; + self.currentPage = kDefaultCurrentPage; + self.hidesForSinglePage = kDefaultHideForSinglePage; + self.shouldResizeFromCenter = kDefaultShouldResizeFromCenter; +} + + +#pragma mark - Touch event + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + UITouch *touch = [touches anyObject]; + if (touch.view != self) { + NSInteger index = [self.dots indexOfObject:touch.view]; + if ([self.delegate respondsToSelector:@selector(TAPageControl:didSelectPageAtIndex:)]) { + [self.delegate TAPageControl:self didSelectPageAtIndex:index]; + } + } +} + +#pragma mark - Layout + + +/** + * Resizes and moves the receiver view so it just encloses its subviews. + */ +- (void)sizeToFit +{ + [self updateFrame:YES]; +} + + +- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount +{ + return CGSizeMake((self.dotSize.width + self.spacingBetweenDots) * pageCount - self.spacingBetweenDots , self.dotSize.height); +} + + +/** + * Will update dots display and frame. Reuse existing views or instantiate one if required. Update their position in case frame changed. + */ +- (void)updateDots +{ + if (self.numberOfPages == 0) { + return; + } + + for (NSInteger i = 0; i < self.numberOfPages; i++) { + + UIView *dot; + if (i < self.dots.count) { + dot = [self.dots objectAtIndex:i]; + } else { + dot = [self generateDotView]; + } + + [self updateDotFrame:dot atIndex:i]; + } + + [self changeActivity:YES atIndex:self.currentPage]; + + [self hideForSinglePage]; +} + + +/** + * Update frame control to fit current number of pages. It will apply required size if authorize and required. + * + * @param overrideExistingFrame BOOL to allow frame to be overriden. Meaning the required size will be apply no mattter what. + */ +- (void)updateFrame:(BOOL)overrideExistingFrame +{ + CGPoint center = self.center; + CGSize requiredSize = [self sizeForNumberOfPages:self.numberOfPages]; + + // We apply requiredSize only if authorize to and necessary + if (overrideExistingFrame || ((CGRectGetWidth(self.frame) < requiredSize.width || CGRectGetHeight(self.frame) < requiredSize.height) && !overrideExistingFrame)) { + self.frame = CGRectMake(CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), requiredSize.width, requiredSize.height); + if (self.shouldResizeFromCenter) { + self.center = center; + } + } + + [self resetDotViews]; +} + + +/** + * Update the frame of a specific dot at a specific index + * + * @param dot Dot view + * @param index Page index of dot + */ +- (void)updateDotFrame:(UIView *)dot atIndex:(NSInteger)index +{ + // Dots are always centered within view + CGFloat x = (self.dotSize.width + self.spacingBetweenDots) * index + ( (CGRectGetWidth(self.frame) - [self sizeForNumberOfPages:self.numberOfPages].width) / 2); + CGFloat y = (CGRectGetHeight(self.frame) - self.dotSize.height) / 2; + + dot.frame = CGRectMake(x, y, self.dotSize.width, self.dotSize.height); +} + + +#pragma mark - Utils + + +/** + * Generate a dot view and add it to the collection + * + * @return The UIView object representing a dot + */ +- (UIView *)generateDotView +{ + UIView *dotView; + + if (self.dotViewClass) { + dotView = [[self.dotViewClass alloc] initWithFrame:CGRectMake(0, 0, self.dotSize.width, self.dotSize.height)]; + if ([dotView isKindOfClass:[TAAnimatedDotView class]] && self.dotColor) { + ((TAAnimatedDotView *)dotView).dotColor = self.dotColor; + } + } else { + dotView = [[UIImageView alloc] initWithImage:self.dotImage]; + dotView.frame = CGRectMake(0, 0, self.dotSize.width, self.dotSize.height); + } + + if (dotView) { + [self addSubview:dotView]; + [self.dots addObject:dotView]; + } + + dotView.userInteractionEnabled = YES; + return dotView; +} + + +/** + * Change activity state of a dot view. Current/not currrent. + * + * @param active Active state to apply + * @param index Index of dot for state update + */ +- (void)changeActivity:(BOOL)active atIndex:(NSInteger)index +{ + if (self.dotViewClass) { + TAAbstractDotView *abstractDotView = (TAAbstractDotView *)[self.dots objectAtIndex:index]; + if ([abstractDotView respondsToSelector:@selector(changeActivityState:)]) { + [abstractDotView changeActivityState:active]; + } else { + NSLog(@"Custom view : %@ must implement an 'changeActivityState' method or you can subclass %@ to help you.", self.dotViewClass, [TAAbstractDotView class]); + } + } else if (self.dotImage && self.currentDotImage) { + UIImageView *dotView = (UIImageView *)[self.dots objectAtIndex:index]; + dotView.image = (active) ? self.currentDotImage : self.dotImage; + } +} + + +- (void)resetDotViews +{ + for (UIView *dotView in self.dots) { + [dotView removeFromSuperview]; + } + + [self.dots removeAllObjects]; + [self updateDots]; +} + + +- (void)hideForSinglePage +{ + if (self.dots.count == 1 && self.hidesForSinglePage) { + self.hidden = YES; + } else { + self.hidden = NO; + } +} + +#pragma mark - Setters + + +- (void)setNumberOfPages:(NSInteger)numberOfPages +{ + _numberOfPages = numberOfPages; + + // Update dot position to fit new number of pages + [self resetDotViews]; +} + + +- (void)setSpacingBetweenDots:(NSInteger)spacingBetweenDots +{ + _spacingBetweenDots = spacingBetweenDots; + + [self resetDotViews]; +} + + +- (void)setCurrentPage:(NSInteger)currentPage +{ + // If no pages, no current page to treat. + if (self.numberOfPages == 0 || currentPage == _currentPage) { + _currentPage = currentPage; + return; + } + + // Pre set + [self changeActivity:NO atIndex:_currentPage]; + _currentPage = currentPage; + // Post set + [self changeActivity:YES atIndex:_currentPage]; +} + + +- (void)setDotImage:(UIImage *)dotImage +{ + _dotImage = dotImage; + [self resetDotViews]; + self.dotViewClass = nil; +} + + +- (void)setCurrentDotImage:(UIImage *)currentDotimage +{ + _currentDotImage = currentDotimage; + [self resetDotViews]; + self.dotViewClass = nil; +} + + +- (void)setDotViewClass:(Class)dotViewClass +{ + _dotViewClass = dotViewClass; + self.dotSize = CGSizeZero; + [self resetDotViews]; +} + + +#pragma mark - Getters + + +- (NSMutableArray *)dots +{ + if (!_dots) { + _dots = [[NSMutableArray alloc] init]; + } + + return _dots; +} + + +- (CGSize)dotSize +{ + // Dot size logic depending on the source of the dot view + if (self.dotImage && CGSizeEqualToSize(_dotSize, CGSizeZero)) { + _dotSize = self.dotImage.size; + } else if (self.dotViewClass && CGSizeEqualToSize(_dotSize, CGSizeZero)) { + _dotSize = kDefaultDotSize; + return _dotSize; + } + + return _dotSize; +} + +@end diff --git a/UIView+SDExtension.h b/UIView+SDExtension.h new file mode 100755 index 0000000..1982d82 --- /dev/null +++ b/UIView+SDExtension.h @@ -0,0 +1,22 @@ +// +// UIView+SDExtension.h +// SDRefreshView +// +// Created by aier on 15-2-23. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +#import + +#define SDColorCreater(r, g, b, a) [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:a] + + +@interface UIView (SDExtension) + +@property (nonatomic, assign) CGFloat sd_height; +@property (nonatomic, assign) CGFloat sd_width; + +@property (nonatomic, assign) CGFloat sd_y; +@property (nonatomic, assign) CGFloat sd_x; + +@end diff --git a/UIView+SDExtension.m b/UIView+SDExtension.m new file mode 100755 index 0000000..ce7e81f --- /dev/null +++ b/UIView+SDExtension.m @@ -0,0 +1,77 @@ +// +// UIView+SDExtension.m +// SDRefreshView +// +// Created by aier on 15-2-23. +// Copyright (c) 2015年 GSD. All rights reserved. +// + +/** + + ******************************************************* + * * + * 感谢您的支持, 如果下载的代码在使用过程中出现BUG或者其他问题 * + * 您可以发邮件到gsdios@126.com 或者 到 * + * https://github.com/gsdios?tab=repositories 提交问题 * + * * + ******************************************************* + + */ + + +#import "UIView+SDExtension.h" + +@implementation UIView (SDExtension) + +- (CGFloat)sd_height +{ + return self.frame.size.height; +} + +- (void)setSd_height:(CGFloat)sd_height +{ + CGRect temp = self.frame; + temp.size.height = sd_height; + self.frame = temp; +} + +- (CGFloat)sd_width +{ + return self.frame.size.width; +} + +- (void)setSd_width:(CGFloat)sd_width +{ + CGRect temp = self.frame; + temp.size.width = sd_width; + self.frame = temp; +} + + +- (CGFloat)sd_y +{ + return self.frame.origin.y; +} + +- (void)setSd_y:(CGFloat)sd_y +{ + CGRect temp = self.frame; + temp.origin.y = sd_y; + self.frame = temp; +} + +- (CGFloat)sd_x +{ + return self.frame.origin.x; +} + +- (void)setSd_x:(CGFloat)sd_x +{ + CGRect temp = self.frame; + temp.origin.x = sd_x; + self.frame = temp; +} + + + +@end diff --git a/VPImageCropper/VPImageCropperViewController.h b/VPImageCropper/VPImageCropperViewController.h new file mode 100755 index 0000000..bffff97 --- /dev/null +++ b/VPImageCropper/VPImageCropperViewController.h @@ -0,0 +1,28 @@ +// +// VPImageCropperViewController.h +// VPolor +// +// Created by Vinson.D.Warm on 12/30/13. +// Copyright (c) 2013 Huang Vinson. All rights reserved. +// + +#import + +@class VPImageCropperViewController; + +@protocol VPImageCropperDelegate + +- (void)imageCropper:(VPImageCropperViewController *)cropperViewController didFinished:(UIImage *)editedImage; +- (void)imageCropperDidCancel:(VPImageCropperViewController *)cropperViewController; + +@end + +@interface VPImageCropperViewController : UIViewController + +@property (nonatomic, assign) NSInteger tag; +@property (nonatomic, assign) id delegate; +@property (nonatomic, assign) CGRect cropFrame; + +- (id)initWithImage:(UIImage *)originalImage cropFrame:(CGRect)cropFrame limitScaleRatio:(NSInteger)limitRatio; + +@end diff --git a/VPImageCropper/VPImageCropperViewController.m b/VPImageCropper/VPImageCropperViewController.m new file mode 100755 index 0000000..d9a864a --- /dev/null +++ b/VPImageCropper/VPImageCropperViewController.m @@ -0,0 +1,287 @@ +// +// VPImageCropperViewController.m +// VPolor +// +// Created by Vinson.D.Warm on 12/30/13. +// Copyright (c) 2013 Huang Vinson. All rights reserved. +// + +#import "VPImageCropperViewController.h" + +#define SCALE_FRAME_Y 100.0f +#define BOUNDCE_DURATION 0.3f + +@interface VPImageCropperViewController () + +@property (nonatomic, retain) UIImage *originalImage; +@property (nonatomic, retain) UIImage *editedImage; + +@property (nonatomic, retain) UIImageView *showImgView; +@property (nonatomic, retain) UIView *overlayView; +@property (nonatomic, retain) UIView *ratioView; + +@property (nonatomic, assign) CGRect oldFrame; +@property (nonatomic, assign) CGRect largeFrame; +@property (nonatomic, assign) CGFloat limitRatio; + +@property (nonatomic, assign) CGRect latestFrame; + +@end + +@implementation VPImageCropperViewController + +- (void)dealloc { + self.originalImage = nil; + self.showImgView = nil; + self.editedImage = nil; + self.overlayView = nil; + self.ratioView = nil; +} + +- (id)initWithImage:(UIImage *)originalImage cropFrame:(CGRect)cropFrame limitScaleRatio:(NSInteger)limitRatio { + self = [super init]; + if (self) { + self.cropFrame = cropFrame; + self.limitRatio = limitRatio; + self.originalImage = originalImage; + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [self initView]; + [self initControlBtn]; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return NO; +} + +- (void)initView { + self.showImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; + [self.showImgView setMultipleTouchEnabled:YES]; + [self.showImgView setUserInteractionEnabled:YES]; + [self.showImgView setImage:self.originalImage]; + [self.showImgView setUserInteractionEnabled:YES]; + [self.showImgView setMultipleTouchEnabled:YES]; + + // scale to fit the screen + CGFloat oriWidth = self.cropFrame.size.width; + CGFloat oriHeight = self.originalImage.size.height * (oriWidth / self.originalImage.size.width); + CGFloat oriX = self.cropFrame.origin.x + (self.cropFrame.size.width - oriWidth) / 2; + CGFloat oriY = self.cropFrame.origin.y + (self.cropFrame.size.height - oriHeight) / 2; + self.oldFrame = CGRectMake(oriX, oriY, oriWidth, oriHeight); + self.latestFrame = self.oldFrame; + self.showImgView.frame = self.oldFrame; + + self.largeFrame = CGRectMake(0, 0, self.limitRatio * self.oldFrame.size.width, self.limitRatio * self.oldFrame.size.height); + + [self addGestureRecognizers]; + [self.view addSubview:self.showImgView]; + + self.overlayView = [[UIView alloc] initWithFrame:self.view.bounds]; + self.overlayView.alpha = .5f; + self.overlayView.backgroundColor = [UIColor blackColor]; + self.overlayView.userInteractionEnabled = NO; + self.overlayView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [self.view addSubview:self.overlayView]; + + self.ratioView = [[UIView alloc] initWithFrame:self.cropFrame]; + self.ratioView.layer.borderColor = [UIColor yellowColor].CGColor; + self.ratioView.layer.borderWidth = 1.0f; + self.ratioView.autoresizingMask = UIViewAutoresizingNone; + [self.view addSubview:self.ratioView]; + + [self overlayClipping]; +} + +- (void)initControlBtn { + UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 50.0f, 100, 50)]; + cancelBtn.backgroundColor = [UIColor blackColor]; + cancelBtn.titleLabel.textColor = [UIColor whiteColor]; + [cancelBtn setTitle:@"Cancel" forState:UIControlStateNormal]; + [cancelBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]]; + [cancelBtn.titleLabel setTextAlignment:NSTextAlignmentCenter]; + [cancelBtn.titleLabel setLineBreakMode:NSLineBreakByWordWrapping]; + [cancelBtn.titleLabel setNumberOfLines:0]; + [cancelBtn setTitleEdgeInsets:UIEdgeInsetsMake(5.0f, 5.0f, 5.0f, 5.0f)]; + [cancelBtn addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:cancelBtn]; + + UIButton *confirmBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width - 100.0f, self.view.frame.size.height - 50.0f, 100, 50)]; + confirmBtn.backgroundColor = [UIColor blackColor]; + confirmBtn.titleLabel.textColor = [UIColor whiteColor]; + [confirmBtn setTitle:@"OK" forState:UIControlStateNormal]; + [confirmBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]]; + [confirmBtn.titleLabel setTextAlignment:NSTextAlignmentCenter]; + confirmBtn.titleLabel.textColor = [UIColor whiteColor]; + [confirmBtn.titleLabel setLineBreakMode:NSLineBreakByWordWrapping]; + [confirmBtn.titleLabel setNumberOfLines:0]; + [confirmBtn setTitleEdgeInsets:UIEdgeInsetsMake(5.0f, 5.0f, 5.0f, 5.0f)]; + [confirmBtn addTarget:self action:@selector(confirm:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:confirmBtn]; +} + +- (void)cancel:(id)sender { + if (self.delegate && [self.delegate conformsToProtocol:@protocol(VPImageCropperDelegate)]) { + [self.delegate imageCropperDidCancel:self]; + } +} + +- (void)confirm:(id)sender { + if (self.delegate && [self.delegate conformsToProtocol:@protocol(VPImageCropperDelegate)]) { + [self.delegate imageCropper:self didFinished:[self getSubImage]]; + } +} + +- (void)overlayClipping +{ + CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; + CGMutablePathRef path = CGPathCreateMutable(); + // Left side of the ratio view + CGPathAddRect(path, nil, CGRectMake(0, 0, + self.ratioView.frame.origin.x, + self.overlayView.frame.size.height)); + // Right side of the ratio view + CGPathAddRect(path, nil, CGRectMake( + self.ratioView.frame.origin.x + self.ratioView.frame.size.width, + 0, + self.overlayView.frame.size.width - self.ratioView.frame.origin.x - self.ratioView.frame.size.width, + self.overlayView.frame.size.height)); + // Top side of the ratio view + CGPathAddRect(path, nil, CGRectMake(0, 0, + self.overlayView.frame.size.width, + self.ratioView.frame.origin.y)); + // Bottom side of the ratio view + CGPathAddRect(path, nil, CGRectMake(0, + self.ratioView.frame.origin.y + self.ratioView.frame.size.height, + self.overlayView.frame.size.width, + self.overlayView.frame.size.height - self.ratioView.frame.origin.y + self.ratioView.frame.size.height)); + maskLayer.path = path; + self.overlayView.layer.mask = maskLayer; + CGPathRelease(path); +} + +// register all gestures +- (void) addGestureRecognizers +{ + // add pinch gesture + UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)]; + [self.view addGestureRecognizer:pinchGestureRecognizer]; + + // add pan gesture + UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)]; + [self.view addGestureRecognizer:panGestureRecognizer]; +} + +// pinch gesture handler +- (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer +{ + UIView *view = self.showImgView; + if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) { + view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale); + pinchGestureRecognizer.scale = 1; + } + else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) { + CGRect newFrame = self.showImgView.frame; + newFrame = [self handleScaleOverflow:newFrame]; + newFrame = [self handleBorderOverflow:newFrame]; + [UIView animateWithDuration:BOUNDCE_DURATION animations:^{ + self.showImgView.frame = newFrame; + self.latestFrame = newFrame; + }]; + } +} + +// pan gesture handler +- (void) panView:(UIPanGestureRecognizer *)panGestureRecognizer +{ + UIView *view = self.showImgView; + if (panGestureRecognizer.state == UIGestureRecognizerStateBegan || panGestureRecognizer.state == UIGestureRecognizerStateChanged) { + // calculate accelerator + CGFloat absCenterX = self.cropFrame.origin.x + self.cropFrame.size.width / 2; + CGFloat absCenterY = self.cropFrame.origin.y + self.cropFrame.size.height / 2; + CGFloat scaleRatio = self.showImgView.frame.size.width / self.cropFrame.size.width; + CGFloat acceleratorX = 1 - ABS(absCenterX - view.center.x) / (scaleRatio * absCenterX); + CGFloat acceleratorY = 1 - ABS(absCenterY - view.center.y) / (scaleRatio * absCenterY); + CGPoint translation = [panGestureRecognizer translationInView:view.superview]; + [view setCenter:(CGPoint){view.center.x + translation.x * acceleratorX, view.center.y + translation.y * acceleratorY}]; + [panGestureRecognizer setTranslation:CGPointZero inView:view.superview]; + } + else if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) { + // bounce to original frame + CGRect newFrame = self.showImgView.frame; + newFrame = [self handleBorderOverflow:newFrame]; + [UIView animateWithDuration:BOUNDCE_DURATION animations:^{ + self.showImgView.frame = newFrame; + self.latestFrame = newFrame; + }]; + } +} + +- (CGRect)handleScaleOverflow:(CGRect)newFrame { + // bounce to original frame + CGPoint oriCenter = CGPointMake(newFrame.origin.x + newFrame.size.width/2, newFrame.origin.y + newFrame.size.height/2); + if (newFrame.size.width < self.oldFrame.size.width) { + newFrame = self.oldFrame; + } + if (newFrame.size.width > self.largeFrame.size.width) { + newFrame = self.largeFrame; + } + newFrame.origin.x = oriCenter.x - newFrame.size.width/2; + newFrame.origin.y = oriCenter.y - newFrame.size.height/2; + return newFrame; +} + +- (CGRect)handleBorderOverflow:(CGRect)newFrame { + // horizontally + if (newFrame.origin.x > self.cropFrame.origin.x) newFrame.origin.x = self.cropFrame.origin.x; + if (CGRectGetMaxX(newFrame) < self.cropFrame.size.width) newFrame.origin.x = self.cropFrame.size.width - newFrame.size.width; + // vertically + if (newFrame.origin.y > self.cropFrame.origin.y) newFrame.origin.y = self.cropFrame.origin.y; + if (CGRectGetMaxY(newFrame) < self.cropFrame.origin.y + self.cropFrame.size.height) { + newFrame.origin.y = self.cropFrame.origin.y + self.cropFrame.size.height - newFrame.size.height; + } + // adapt horizontally rectangle + if (self.showImgView.frame.size.width > self.showImgView.frame.size.height && newFrame.size.height <= self.cropFrame.size.height) { + newFrame.origin.y = self.cropFrame.origin.y + (self.cropFrame.size.height - newFrame.size.height) / 2; + } + return newFrame; +} + +-(UIImage *)getSubImage{ + CGRect squareFrame = self.cropFrame; + CGFloat scaleRatio = self.latestFrame.size.width / self.originalImage.size.width; + CGFloat x = (squareFrame.origin.x - self.latestFrame.origin.x) / scaleRatio; + CGFloat y = (squareFrame.origin.y - self.latestFrame.origin.y) / scaleRatio; + CGFloat w = squareFrame.size.width / scaleRatio; + CGFloat h = squareFrame.size.width / scaleRatio; + if (self.latestFrame.size.width < self.cropFrame.size.width) { + CGFloat newW = self.originalImage.size.width; + CGFloat newH = newW * (self.cropFrame.size.height / self.cropFrame.size.width); + x = 0; y = y + (h - newH) / 2; + w = newH; h = newH; + } + if (self.latestFrame.size.height < self.cropFrame.size.height) { + CGFloat newH = self.originalImage.size.height; + CGFloat newW = newH * (self.cropFrame.size.width / self.cropFrame.size.height); + x = x + (w - newW) / 2; y = 0; + w = newH; h = newH; + } + CGRect myImageRect = CGRectMake(x, y, w, h); + CGImageRef imageRef = self.originalImage.CGImage; + CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect); + CGSize size; + size.width = myImageRect.size.width; + size.height = myImageRect.size.height; + UIGraphicsBeginImageContext(size); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextDrawImage(context, myImageRect, subImageRef); + UIImage* smallImage = [UIImage imageWithCGImage:subImageRef]; + UIGraphicsEndImageContext(); + return smallImage; +} + +@end diff --git a/WXYZ_city.plist b/WXYZ_city.plist new file mode 100644 index 0000000..5efc65c --- /dev/null +++ b/WXYZ_city.plist @@ -0,0 +1,38 @@ + + + + + + hot_city + 武汉 + + + hot_city + 西安 + + + hot_city + 其他 + + + hot_city + 香港 + + + hot_city + 珠海 + + + hot_city + 无锡 + + + hot_city + 郑州 + + + hot_city + 厦门 + + + diff --git a/YSLContainerViewController.h b/YSLContainerViewController.h new file mode 100755 index 0000000..0b65c5f --- /dev/null +++ b/YSLContainerViewController.h @@ -0,0 +1,35 @@ +// +// YSLContainerViewController.h +// YSLContainerViewController +// +// Created by yamaguchi on 2015/02/10. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@protocol YSLContainerViewControllerDelegate + +- (void)containerViewItemIndex:(NSInteger)index currentController:(UIViewController *)controller; + +@end + +@interface YSLContainerViewController : UIViewController + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, strong) UIScrollView *contentScrollView; +@property (nonatomic, strong, readonly) NSMutableArray *titles; +@property (nonatomic, strong, readonly) NSMutableArray *childControllers; + +@property (nonatomic, strong) UIFont *menuItemFont; +@property (nonatomic, strong) UIColor *menuItemTitleColor; +@property (nonatomic, strong) UIColor *menuItemSelectedTitleColor; +@property (nonatomic, strong) UIColor *menuBackGroudColor; +@property (nonatomic, strong) UIColor *menuIndicatorColor; + +- (id)initWithControllers:(NSArray *)controllers + topBarHeight:(CGFloat)topBarHeight + parentViewController:(UIViewController *)parentViewController; + +@end diff --git a/YSLContainerViewController.m b/YSLContainerViewController.m new file mode 100755 index 0000000..5d3cde6 --- /dev/null +++ b/YSLContainerViewController.m @@ -0,0 +1,195 @@ +// +// YSLContainerViewController.m +// YSLContainerViewController +// +// Created by yamaguchi on 2015/02/10. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "YSLContainerViewController.h" +#import "YSLScrollMenuView.h" + +static const CGFloat kYSLScrollMenuViewHeight = 30; + +@interface YSLContainerViewController () + +@property (nonatomic, assign) CGFloat topBarHeight; +@property (nonatomic, assign) NSInteger currentIndex; +@property (nonatomic, strong) YSLScrollMenuView *menuView; + +@end + +@implementation YSLContainerViewController + +- (id)initWithControllers:(NSArray *)controllers + topBarHeight:(CGFloat)topBarHeight + parentViewController:(UIViewController *)parentViewController +{ + self = [super init]; + if (self) { + + [parentViewController addChildViewController:self]; + [self didMoveToParentViewController:parentViewController]; + + _topBarHeight = topBarHeight; + _titles = [[NSMutableArray alloc] init]; + _childControllers = [[NSMutableArray alloc] init]; + _childControllers = [controllers mutableCopy]; + + NSMutableArray *titles = [NSMutableArray array]; + for (UIViewController *vc in _childControllers) { + [titles addObject:[vc valueForKey:@"title"]]; + } + _titles = [titles mutableCopy]; + } + return self; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // setupViews + UIView *viewCover = [[UIView alloc]init]; + [self.view addSubview:viewCover]; + + // ContentScrollview setup + _contentScrollView = [[UIScrollView alloc]init]; + _contentScrollView.frame = CGRectMake(0,_topBarHeight + kYSLScrollMenuViewHeight, self.view.frame.size.width, self.view.frame.size.height - (_topBarHeight + kYSLScrollMenuViewHeight)); + _contentScrollView.backgroundColor = [UIColor clearColor]; + _contentScrollView.pagingEnabled = YES; + _contentScrollView.delegate = self; + _contentScrollView.showsHorizontalScrollIndicator = NO; + _contentScrollView.scrollsToTop = NO; + [self.view addSubview:_contentScrollView]; + _contentScrollView.contentSize = CGSizeMake(_contentScrollView.frame.size.width * self.childControllers.count, _contentScrollView.frame.size.height); + + // ContentViewController setup + for (int i = 0; i < self.childControllers.count; i++) { + id obj = [self.childControllers objectAtIndex:i]; + if ([obj isKindOfClass:[UIViewController class]]) { + UIViewController *controller = (UIViewController*)obj; + CGFloat scrollWidth = _contentScrollView.frame.size.width; + CGFloat scrollHeght = _contentScrollView.frame.size.height; + controller.view.frame = CGRectMake(i * scrollWidth, 0, scrollWidth, scrollHeght); + [_contentScrollView addSubview:controller.view]; + } + } + // meunView + _menuView = [[YSLScrollMenuView alloc]initWithFrame:CGRectMake(0, _topBarHeight, self.view.frame.size.width, kYSLScrollMenuViewHeight)]; + _menuView.backgroundColor = [UIColor clearColor]; + _menuView.delegate = self; + _menuView.viewbackgroudColor = self.menuBackGroudColor; + _menuView.itemfont = self.menuItemFont; + _menuView.itemTitleColor = self.menuItemTitleColor; + _menuView.itemIndicatorColor = self.menuIndicatorColor; + _menuView.scrollView.scrollsToTop = NO; + [_menuView setItemTitleArray:self.titles]; + [self.view addSubview:_menuView]; + [_menuView setShadowView]; + + [self scrollMenuViewSelectedIndex:0]; +} + +#pragma mark -- private + +- (void)setChildViewControllerWithCurrentIndex:(NSInteger)currentIndex +{ + for (int i = 0; i < self.childControllers.count; i++) { + id obj = self.childControllers[i]; + if ([obj isKindOfClass:[UIViewController class]]) { + UIViewController *controller = (UIViewController*)obj; + if (i == currentIndex) { + [controller willMoveToParentViewController:self]; + [self addChildViewController:controller]; + [controller didMoveToParentViewController:self]; + } else { + [controller willMoveToParentViewController:self]; + [controller removeFromParentViewController]; + [controller didMoveToParentViewController:self]; + } + } + } +} +#pragma mark -- YSLScrollMenuView Delegate + +- (void)scrollMenuViewSelectedIndex:(NSInteger)index +{ + [_contentScrollView setContentOffset:CGPointMake(index * _contentScrollView.frame.size.width, 0.) animated:YES]; + + // item color + [_menuView setItemTextColor:self.menuItemTitleColor + seletedItemTextColor:self.menuItemSelectedTitleColor + currentIndex:index]; + + [self setChildViewControllerWithCurrentIndex:index]; + + if (index == self.currentIndex) { return; } + self.currentIndex = index; + + if (self.delegate && [self.delegate respondsToSelector:@selector(containerViewItemIndex:currentController:)]) { + [self.delegate containerViewItemIndex:self.currentIndex currentController:_childControllers[self.currentIndex]]; + } +} + +#pragma mark -- ScrollView Delegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + CGFloat oldPointX = self.currentIndex * scrollView.frame.size.width; + CGFloat ratio = (scrollView.contentOffset.x - oldPointX) / scrollView.frame.size.width; + + BOOL isToNextItem = (_contentScrollView.contentOffset.x > oldPointX); + NSInteger targetIndex = (isToNextItem) ? self.currentIndex + 1 : self.currentIndex - 1; + + CGFloat nextItemOffsetX = 1.0f; + CGFloat currentItemOffsetX = 1.0f; + + nextItemOffsetX = (_menuView.scrollView.contentSize.width - _menuView.scrollView.frame.size.width) * targetIndex / (_menuView.itemViewArray.count - 1); + currentItemOffsetX = (_menuView.scrollView.contentSize.width - _menuView.scrollView.frame.size.width) * self.currentIndex / (_menuView.itemViewArray.count - 1); + + if (targetIndex >= 0 && targetIndex < self.childControllers.count) { + // MenuView Move + CGFloat indicatorUpdateRatio = ratio; + if (isToNextItem) { + + CGPoint offset = _menuView.scrollView.contentOffset; + offset.x = (nextItemOffsetX - currentItemOffsetX) * ratio + currentItemOffsetX; + [_menuView.scrollView setContentOffset:offset animated:NO]; + + indicatorUpdateRatio = indicatorUpdateRatio * 1; + [_menuView setIndicatorViewFrameWithRatio:indicatorUpdateRatio isNextItem:isToNextItem toIndex:self.currentIndex]; + } else { + + CGPoint offset = _menuView.scrollView.contentOffset; + offset.x = currentItemOffsetX - (nextItemOffsetX - currentItemOffsetX) * ratio; + [_menuView.scrollView setContentOffset:offset animated:NO]; + + indicatorUpdateRatio = indicatorUpdateRatio * -1; + [_menuView setIndicatorViewFrameWithRatio:indicatorUpdateRatio isNextItem:isToNextItem toIndex:targetIndex]; + } + } +} + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView +{ + int currentIndex = scrollView.contentOffset.x / _contentScrollView.frame.size.width; + + if (currentIndex == self.currentIndex) { return; } + self.currentIndex = currentIndex; + + // item color + [_menuView setItemTextColor:self.menuItemTitleColor + seletedItemTextColor:self.menuItemSelectedTitleColor + currentIndex:currentIndex]; + + if (self.delegate && [self.delegate respondsToSelector:@selector(containerViewItemIndex:currentController:)]) { + [self.delegate containerViewItemIndex:self.currentIndex currentController:_childControllers[self.currentIndex]]; + } + [self setChildViewControllerWithCurrentIndex:self.currentIndex]; +} + +@end diff --git a/YSLScrollMenuView.h b/YSLScrollMenuView.h new file mode 100755 index 0000000..5b77d83 --- /dev/null +++ b/YSLScrollMenuView.h @@ -0,0 +1,37 @@ +// +// YSLScrollMenuView.h +// YSLContainerViewController +// +// Created by yamaguchi on 2015/03/03. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import + +@protocol YSLScrollMenuViewDelegate + +- (void)scrollMenuViewSelectedIndex:(NSInteger)index; + +@end + +@interface YSLScrollMenuView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic, strong) NSArray *itemTitleArray; +@property (nonatomic, strong) NSArray *itemViewArray; + +@property (nonatomic, strong) UIColor *viewbackgroudColor; +@property (nonatomic, strong) UIFont *itemfont; +@property (nonatomic, strong) UIColor *itemTitleColor; +@property (nonatomic, strong) UIColor *itemSelectedTitleColor; +@property (nonatomic, strong) UIColor *itemIndicatorColor; + +- (void)setShadowView; + +- (void)setIndicatorViewFrameWithRatio:(CGFloat)ratio isNextItem:(BOOL)isNextItem toIndex:(NSInteger)toIndex; + +- (void)setItemTextColor:(UIColor *)itemTextColor + seletedItemTextColor:(UIColor *)selectedItemTextColor + currentIndex:(NSInteger)currentIndex; +@end diff --git a/YSLScrollMenuView.m b/YSLScrollMenuView.m new file mode 100755 index 0000000..34816fa --- /dev/null +++ b/YSLScrollMenuView.m @@ -0,0 +1,197 @@ +// +// YSLScrollMenuView.m +// YSLContainerViewController +// +// Created by yamaguchi on 2015/03/03. +// Copyright (c) 2015年 h.yamaguchi. All rights reserved. +// + +#import "YSLScrollMenuView.h" + +static const CGFloat kYSLScrollMenuViewWidth = 80; +static const CGFloat kYSLScrollMenuViewMargin = 5; +static const CGFloat kYSLIndicatorHeight = 4; + +@interface YSLScrollMenuView () + + +@property (nonatomic, strong) UIView *indicatorView; + +@end + +@implementation YSLScrollMenuView + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // default + _viewbackgroudColor = [UIColor whiteColor]; + _itemfont = [UIFont systemFontOfSize:16]; + _itemTitleColor = [UIColor colorWithRed:0.866667 green:0.866667 blue:0.866667 alpha:1.0]; + _itemSelectedTitleColor = [UIColor colorWithRed:0.333333 green:0.333333 blue:0.333333 alpha:1.0]; + _itemIndicatorColor = [UIColor colorWithRed:0.168627 green:0.498039 blue:0.839216 alpha:1.0]; + + self.backgroundColor = _viewbackgroudColor; + _scrollView = [[UIScrollView alloc]initWithFrame:self.bounds]; + _scrollView.showsHorizontalScrollIndicator = NO; + [self addSubview:_scrollView]; + } + return self; +} + +#pragma mark -- Setter + +- (void)setViewbackgroudColor:(UIColor *)viewbackgroudColor +{ + if (!viewbackgroudColor) { return; } + _viewbackgroudColor = viewbackgroudColor; + self.backgroundColor = viewbackgroudColor; +} + +- (void)setItemfont:(UIFont *)itemfont +{ + if (!itemfont) { return; } + _itemfont = itemfont; + for (UILabel *label in _itemTitleArray) { + label.font = itemfont; + } +} + +- (void)setItemTitleColor:(UIColor *)itemTitleColor +{ + if (!itemTitleColor) { return; } + _itemTitleColor = itemTitleColor; + for (UILabel *label in _itemTitleArray) { + label.textColor = itemTitleColor; + } +} + +- (void)setItemIndicatorColor:(UIColor *)itemIndicatorColor +{ + if (!itemIndicatorColor) { return; } + _itemIndicatorColor = itemIndicatorColor; + _indicatorView.backgroundColor = itemIndicatorColor; +} + +- (void)setItemTitleArray:(NSArray *)itemTitleArray +{ + if (_itemTitleArray != itemTitleArray) { + _itemTitleArray = itemTitleArray; + NSMutableArray *views = [NSMutableArray array]; + + for (int i = 0; i < itemTitleArray.count; i++) { + CGRect frame = CGRectMake(0, 0, kYSLScrollMenuViewWidth, CGRectGetHeight(self.frame)); + UILabel *itemView = [[UILabel alloc] initWithFrame:frame]; + [self.scrollView addSubview:itemView]; + itemView.tag = i; + itemView.text = itemTitleArray[i]; + itemView.userInteractionEnabled = YES; + itemView.backgroundColor = [UIColor clearColor]; + itemView.textAlignment = NSTextAlignmentCenter; + itemView.font = self.itemfont; + itemView.textColor = _itemTitleColor; + [views addObject:itemView]; + + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(itemViewTapAction:)]; + [itemView addGestureRecognizer:tapGesture]; + } + + self.itemViewArray = [NSArray arrayWithArray:views]; + + // indicator + _indicatorView = [[UIView alloc]init]; + _indicatorView.frame = CGRectMake(10, _scrollView.frame.size.height - kYSLIndicatorHeight, kYSLScrollMenuViewWidth, kYSLIndicatorHeight); + _indicatorView.backgroundColor = self.itemIndicatorColor; + [_scrollView addSubview:_indicatorView]; + } +} + +#pragma mark -- public + +- (void)setIndicatorViewFrameWithRatio:(CGFloat)ratio isNextItem:(BOOL)isNextItem toIndex:(NSInteger)toIndex +{ + CGFloat indicatorX = 0.0; + if (isNextItem) { + indicatorX = ((kYSLScrollMenuViewMargin + kYSLScrollMenuViewWidth) * ratio ) + (toIndex * kYSLScrollMenuViewWidth) + ((toIndex + 1) * kYSLScrollMenuViewMargin); + } else { + indicatorX = ((kYSLScrollMenuViewMargin + kYSLScrollMenuViewWidth) * (1 - ratio) ) + (toIndex * kYSLScrollMenuViewWidth) + ((toIndex + 1) * kYSLScrollMenuViewMargin); + } + + if (indicatorX < kYSLScrollMenuViewMargin || indicatorX > self.scrollView.contentSize.width - (kYSLScrollMenuViewMargin + kYSLScrollMenuViewWidth)) { + return; + } + _indicatorView.frame = CGRectMake(indicatorX, _scrollView.frame.size.height - kYSLIndicatorHeight, kYSLScrollMenuViewWidth, kYSLIndicatorHeight); + // NSLog(@"retio : %f",_indicatorView.frame.origin.x); +} + +- (void)setItemTextColor:(UIColor *)itemTextColor + seletedItemTextColor:(UIColor *)selectedItemTextColor + currentIndex:(NSInteger)currentIndex +{ + if (itemTextColor) { _itemTitleColor = itemTextColor; } + if (selectedItemTextColor) { _itemSelectedTitleColor = selectedItemTextColor; } + + for (int i = 0; i < self.itemViewArray.count; i++) { + UILabel *label = self.itemViewArray[i]; + if (i == currentIndex) { + label.alpha = 0.0; + [UIView animateWithDuration:0.75 + delay:0.0 + options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction + animations:^{ + label.alpha = 1.0; + label.textColor = _itemSelectedTitleColor; + } completion:^(BOOL finished) { + }]; + } else { + label.textColor = _itemTitleColor; + } + } +} + +#pragma mark -- private + +// menu shadow +- (void)setShadowView +{ + UIView *view = [[UIView alloc]init]; + view.frame = CGRectMake(0, self.frame.size.height - 0.5, CGRectGetWidth(self.frame), 0.5); + view.backgroundColor = [UIColor lightGrayColor]; + [self addSubview:view]; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGFloat x = kYSLScrollMenuViewMargin; + for (NSUInteger i = 0; i < self.itemViewArray.count; i++) { + CGFloat width = kYSLScrollMenuViewWidth; + UIView *itemView = self.itemViewArray[i]; + itemView.frame = CGRectMake(x, 0, width, self.scrollView.frame.size.height); + x += width + kYSLScrollMenuViewMargin; + } + self.scrollView.contentSize = CGSizeMake(x, self.scrollView.frame.size.height); + + CGRect frame = self.scrollView.frame; + if (self.frame.size.width > x) { + frame.origin.x = (self.frame.size.width - x) / 2; + frame.size.width = x; + } else { + frame.origin.x = 0; + frame.size.width = self.frame.size.width; + } + self.scrollView.frame = frame; +} + +#pragma mark -- Selector --------------------------------------- // +- (void)itemViewTapAction:(UITapGestureRecognizer *)Recongnizer +{ + if (self.delegate && [self.delegate respondsToSelector:@selector(scrollMenuViewSelectedIndex:)]) { + [self.delegate scrollMenuViewSelectedIndex:[(UIGestureRecognizer*) Recongnizer view].tag]; + } +} + +@end diff --git a/city/CollectionHeadView.h b/city/CollectionHeadView.h new file mode 100644 index 0000000..b523b2a --- /dev/null +++ b/city/CollectionHeadView.h @@ -0,0 +1,17 @@ +// +// CollectionHeadView.h +// collection_master +// +// Created by 是 撒 on 5/17/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import + +@interface CollectionHeadView : UICollectionReusableView + +@property (strong, nonatomic) UILabel *label1; +@property (strong, nonatomic) UILabel *label; +@property (strong, nonatomic) UILabel *label2; + +@end diff --git a/city/CollectionHeadView.m b/city/CollectionHeadView.m new file mode 100644 index 0000000..f441e12 --- /dev/null +++ b/city/CollectionHeadView.m @@ -0,0 +1,38 @@ +// +// CollectionHeadView.m +// collection_master +// +// Created by 是 撒 on 5/17/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import "CollectionHeadView.h" + +@implementation CollectionHeadView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + _label1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 0.5)]; + _label1.text = @""; + [_label1 setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; + + _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0.5, 320, 29)]; + _label.text = @"This is HeadView"; + _label.textAlignment = NSTextAlignmentLeft; + _label.font = [UIFont systemFontOfSize:10]; + _label.backgroundColor = [UIColor whiteColor]; + + _label2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 29.5, 320, 0.5)]; + _label2.text = @""; + [_label2 setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; + + [self addSubview:_label2]; + [self addSubview:_label1]; + [self addSubview:_label]; + } + return self; +} + +@end diff --git a/city/test.h b/city/test.h new file mode 100644 index 0000000..befc8ab --- /dev/null +++ b/city/test.h @@ -0,0 +1,37 @@ +// +// test.h +// collection_master +// +// Created by 是 撒 on 5/17/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import + +@protocol testDelegate +-(void)didSelectIndex:(NSInteger)index city:(NSString*)city; +@end +@interface test : UIView + +{ +// UICollectionView *collectionView; + NSString * identifier; + + UILabel *title; + + NSArray *hot_city; + NSArray *ABCDEF_city; + NSArray *GHIJ_city; + NSArray *KLMN_city; + NSArray *OPQR_city; + NSArray *STUV_city; + NSArray *WXYZ_city; +} + +-(id)initWithlist:(CGFloat)height; +- (void)showInView:(UIViewController *)Sview; + +@property(nonatomic,assign) id delegate; +@property(nonatomic, strong) UICollectionView *collectionView; + +@end diff --git a/city/test.m b/city/test.m new file mode 100644 index 0000000..1ef16e9 --- /dev/null +++ b/city/test.m @@ -0,0 +1,390 @@ + +// +// test.m +// collection_master +// +// Created by 是 撒 on 5/17/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import "test.h" +#import "testcell.h" +#import "CollectionHeadView.h" + +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width +@interface test () + + + +@end + +@implementation test + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} +-(id)initWithlist:(CGFloat)height{ + + /** + * 绑定本地数据(热门城市) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"hot_city.plist" ofType:nil]; + hot_city = [NSArray arrayWithContentsOfFile:fullpath]; + + /** + * 绑定本地数据(ABCDEF) + */ + // 读取本地资源文件保存数组 + NSString *fullpath1=[[NSBundle mainBundle]pathForResource:@"ABCDEF_city.plist" ofType:nil]; + ABCDEF_city = [NSArray arrayWithContentsOfFile:fullpath1]; + + /** + * 绑定本地数据(GHIJ) + */ + // 读取本地资源文件保存数组 + NSString *fullpath2=[[NSBundle mainBundle]pathForResource:@"GHIJ_city.plist" ofType:nil]; + GHIJ_city = [NSArray arrayWithContentsOfFile:fullpath2]; + + /** + * 绑定本地数据(KLMN) + */ + // 读取本地资源文件保存数组 + NSString *fullpath3=[[NSBundle mainBundle]pathForResource:@"KLMN_city.plist" ofType:nil]; + KLMN_city = [NSArray arrayWithContentsOfFile:fullpath3]; + + /** + * 绑定本地数据(OPQR) + */ + // 读取本地资源文件保存数组 + NSString *fullpath4=[[NSBundle mainBundle]pathForResource:@"OPQR_city.plist" ofType:nil]; + OPQR_city = [NSArray arrayWithContentsOfFile:fullpath4]; + + /** + * 绑定本地数据(STUV) + */ + // 读取本地资源文件保存数组 + NSString *fullpath5=[[NSBundle mainBundle]pathForResource:@"STUV_city.plist" ofType:nil]; + STUV_city = [NSArray arrayWithContentsOfFile:fullpath5]; + + /** + * 绑定本地数据(WXYZ) + */ + // 读取本地资源文件保存数组 + NSString *fullpath6=[[NSBundle mainBundle]pathForResource:@"WXYZ_city.plist" ofType:nil]; + WXYZ_city = [NSArray arrayWithContentsOfFile:fullpath6]; + + + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:@" 城市"]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + // 设置collectionview + identifier = @"cell"; + + // 初始化layout + + UICollectionViewFlowLayout * flowLayout =[[UICollectionViewFlowLayout alloc] init]; + + [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; + + + _collectionView =[[UICollectionView alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, ScreenHeight/2)collectionViewLayout:flowLayout]; + + [_collectionView setBackgroundColor:[UIColor whiteColor]]; + //注册单元格 + + [_collectionView registerClass:[testcell class]forCellWithReuseIdentifier:identifier]; + + //collection头视图的注册 + [_collectionView registerClass:[CollectionHeadView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head"]; + + //设置代理 + + _collectionView.delegate = self; + + _collectionView.dataSource = self; + + //代码控制header和footer的显示 + UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)_collectionView.collectionViewLayout; + collectionViewLayout.headerReferenceSize = CGSizeMake(ScreenWidth, 20); + + [self addSubview:title]; + [self addSubview:_collectionView]; + [self animeData]; + + } +return self; +} + +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = (id)self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-_collectionView.frame.size.height)-(title.frame.size.height)-40, title.frame.size.width, title.frame.size.height)]; + [_collectionView setFrame:CGRectMake(_collectionView.frame.origin.x, ScreenHeight-_collectionView.frame.size.height-40, _collectionView.frame.size.width, _collectionView.frame.size.height)]; + + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [_collectionView setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + [Sview.view addSubview:self]; + } +} + +#pragma mark - collectionView delegate + +//设置分区 + + + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView + +{ + + return 7; + +} + + + + + +//设置元素的的大小框 + +-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section + +{ + + UIEdgeInsets top = {30,15,30,15}; + + return top; + +} + +//每个分区上得元素个数 + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section + +{ + switch (section) { + case 0: + return hot_city.count; + break; + case 1: + return ABCDEF_city.count; + break; + case 2: + return GHIJ_city.count; + break; + case 3: + return KLMN_city.count; + break; + case 4: + return OPQR_city.count; + break; + case 5: + return STUV_city.count; + break; + case 6: + return WXYZ_city.count; + break; + default: + return 15; + break; + } + +} + + + +//设置元素内容 + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath + +{ + + + NSUInteger row = [indexPath row]; + + + + testcell * cell =[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; + if(!cell.selected){ + cell.city.textColor = [UIColor blackColor]; + } + [cell sizeToFit]; + [cell setIsAccessibilityElement:YES]; + cell.backgroundColor =[UIColor whiteColor]; + + if(indexPath.section == 0){ + + NSDictionary *rowDict = [hot_city objectAtIndex:row]; + [cell.city setText:[rowDict objectForKey:@"hot_city"]]; + return cell; + }else if(indexPath.section == 1){ + NSDictionary *rowDict1 = [ABCDEF_city objectAtIndex:row]; + [cell.city setText:[rowDict1 objectForKey:@"hot_city"]]; + + return cell; + }else if(indexPath.section == 2){ + NSDictionary *rowDict2 = [GHIJ_city objectAtIndex:row]; + [cell.city setText:[rowDict2 objectForKey:@"hot_city"]]; + + return cell; + }else if(indexPath.section == 3){ + NSDictionary *rowDict3 = [KLMN_city objectAtIndex:row]; + [cell.city setText:[rowDict3 objectForKey:@"hot_city"]]; + + return cell; + }else if(indexPath.section == 4){ + NSDictionary *rowDict4 = [OPQR_city objectAtIndex:row]; + [cell.city setText:[rowDict4 objectForKey:@"hot_city"]]; + + return cell; + }else if(indexPath.section == 5){ + NSDictionary *rowDict5 = [STUV_city objectAtIndex:row]; + [cell.city setText:[rowDict5 objectForKey:@"hot_city"]]; + return cell; + }else{ + NSDictionary *rowDict6 = [WXYZ_city objectAtIndex:row]; + [cell.city setText:[rowDict6 objectForKey:@"hot_city"]]; + return cell; + } + + +} +// 设置点击事件 +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + + testcell * cell = (testcell *)[collectionView cellForItemAtIndexPath:indexPath]; + NSLog(@"%@",cell.city.text); + + + + [self tappedCancel]; + + + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelectIndex: city:)]){ + NSLog(@"city != nil"); + [_delegate didSelectIndex:indexPath.row city:cell.city.text]; + return; + } + + +} + +// 返回headview或footview +- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { + if (indexPath.section == 0) { + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + [headView.label setTextColor:[UIColor lightGrayColor]]; + headView.label.text = @" 热门城市"; + return headView; + }else if(indexPath.section == 1){ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" ABCDEF"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + }else if (indexPath.section == 2){ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" GHIJ"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + }else if (indexPath.section == 3){ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" KLMN"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + }else if (indexPath.section == 4){ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" OPQR"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + }else if (indexPath.section == 5){ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" STUV"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + }else{ + CollectionHeadView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"head" forIndexPath:indexPath]; + headView.label.text = @" WXYZ"; + [headView.label setTextColor:[UIColor lightGrayColor]]; + return headView; + } + +} + + +//设置单元格宽度 + +//设置元素大小 + +-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ + + + + return CGSizeMake(80, 20); + +} + + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/city/testcell.h b/city/testcell.h new file mode 100644 index 0000000..0cde52f --- /dev/null +++ b/city/testcell.h @@ -0,0 +1,15 @@ +// +// testcell.h +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import + +@interface testcell : UICollectionViewCell + +@property (strong, nonatomic) UILabel *city; + +@end diff --git a/city/testcell.m b/city/testcell.m new file mode 100644 index 0000000..0f90e01 --- /dev/null +++ b/city/testcell.m @@ -0,0 +1,41 @@ +// +// testcell.m +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import "testcell.h" + +@implementation testcell + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + _city = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 80, 20)]; + _city.text = @"成都"; + [_city setTextColor:[UIColor colorWithRed:153.0/255 green:153.0/255 blue:153.0/255 alpha:1.0f]]; + _city.textAlignment = NSTextAlignmentCenter; + _city.font = [UIFont systemFontOfSize:12]; + _city.backgroundColor = [UIColor clearColor]; + + [self addSubview:_city]; + } + return self; +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + NSLog(@"sdasdas"); + [self setSelected:selected animated:animated]; + if(selected){ + _city.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; + }else{ + self.backgroundColor = [UIColor redColor]; + + _city.textColor = [UIColor colorWithRed:153.0/255 green:153.0/255 blue:153.0/255 alpha:1.0f]; + } +} + +@end diff --git a/hot_city.plist b/hot_city.plist new file mode 100644 index 0000000..d476477 --- /dev/null +++ b/hot_city.plist @@ -0,0 +1,30 @@ + + + + + + hot_city + 北京 + + + hot_city + 上海 + + + hot_city + 广州 + + + hot_city + 成都 + + + hot_city + 深圳 + + + hot_city + 武汉 + + + diff --git a/image0.png b/image0.png new file mode 100644 index 0000000000000000000000000000000000000000..f3899fff46a17f18a79d1ccfed0d43a136c592ac GIT binary patch literal 156562 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 A6951J literal 0 HcmV?d00001 diff --git a/image1.png b/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..3e48add44976ae7c86125e4222287b99df3f78fe GIT binary patch literal 156562 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 L&Ru!-4R`;4hE!5z literal 0 HcmV?d00001 diff --git a/image2.png b/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3899fff46a17f18a79d1ccfed0d43a136c592ac GIT binary patch literal 156562 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 A6951J literal 0 HcmV?d00001 diff --git a/image3.png b/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..3e48add44976ae7c86125e4222287b99df3f78fe GIT binary patch literal 156562 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 L&Ru!-4R`;4hE!5z literal 0 HcmV?d00001 diff --git a/industry.h b/industry.h new file mode 100644 index 0000000..af0cdd9 --- /dev/null +++ b/industry.h @@ -0,0 +1,39 @@ +// +// industry.h +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import +#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] +#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width + + +@protocol industryDelegate + +-(void)didSelect:(NSString*)industry; + +@end + +@interface industry : UIView{ + + NSString * identifier; + + UILabel *title; + + NSArray *industry_kind; +} + +-(id)initWithlist:(CGFloat)height; +- (void)showInView:(UIViewController *)Sview; +@property(nonatomic, strong) UICollectionView *collectionView; +// 委托协议 +@property(nonatomic,assign) id delegate; + +@end diff --git a/industry.m b/industry.m new file mode 100644 index 0000000..e6c22aa --- /dev/null +++ b/industry.m @@ -0,0 +1,219 @@ +// +// industry.m +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import "industry.h" + +#import "industry_cell.h" + + + +@implementation industry +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} +-(id)initWithlist:(CGFloat)height{ + /** + * 绑定本地数据(行业领域) + */ + // 读取本地资源文件保存数组 + NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"industry.plist" ofType:nil]; + industry_kind = [NSArray arrayWithContentsOfFile:fullpath]; + self = [super init]; + if(self){ + self.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); + self.backgroundColor = RGBACOLOR(160, 160, 160, 0); + title = [[UILabel alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 30)]; + [title setText:@" 行业领域"]; + title.font = [UIFont systemFontOfSize:12]; + [title setTextColor:[UIColor colorWithRed:0.0/255 green:161.0/255 blue:233.0/255 alpha:1.0f]]; + [title setBackgroundColor:[UIColor colorWithRed:222.0/255 green:251.0/255 blue:255.0/255 alpha:1.0f]]; + + // 设置collectionview + identifier = @"cell"; + + // 初始化layout + + UICollectionViewFlowLayout * flowLayout =[[UICollectionViewFlowLayout alloc] init]; + + [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; + + + _collectionView =[[UICollectionView alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, ScreenHeight/2)collectionViewLayout:flowLayout]; + + [_collectionView setBackgroundColor:[UIColor whiteColor]]; + //注册单元格 + + [_collectionView registerClass:[industry_cell class]forCellWithReuseIdentifier:identifier]; + + + + //设置代理 + + _collectionView.delegate = self; + + _collectionView.dataSource = self; + + //代码控制header和footer的显示 + UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout *)_collectionView.collectionViewLayout; + collectionViewLayout.headerReferenceSize = CGSizeMake(ScreenWidth, 20); + + [self addSubview:title]; + [self addSubview:_collectionView]; + [self animeData]; + + } + return self; + + +} +-(void)animeData{ + //self.userInteractionEnabled = YES; + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; + [self addGestureRecognizer:tapGesture]; + tapGesture.delegate = (id)self; + [UIView animateWithDuration:.25 animations:^{ + self.backgroundColor = RGBACOLOR(160, 160, 160, .4); + [UIView animateWithDuration:.25 animations:^{ + [title setFrame:CGRectMake(title.frame.origin.x, (ScreenHeight-_collectionView.frame.size.height)-(title.frame.size.height)-40, title.frame.size.width, title.frame.size.height)]; + [_collectionView setFrame:CGRectMake(_collectionView.frame.origin.x, ScreenHeight-_collectionView.frame.size.height-40, _collectionView.frame.size.width, _collectionView.frame.size.height)]; + + }]; + } completion:^(BOOL finished) { + }]; +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ + if([touch.view isKindOfClass:[self class]]){ + return YES; + } + return NO; +} + +-(void)tappedCancel{ + [UIView animateWithDuration:.25 animations:^{ + + [_collectionView setFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 0)]; + [title setFrame:CGRectMake(0, ScreenHeight, ScreenHeight, 0)]; + + self.alpha = 0; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + +- (void)showInView:(UIViewController *)Sview +{ + if(Sview==nil){ + [[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self]; + }else{ + [Sview.view addSubview:self]; + } +} +#pragma mark - collectionView delegate + +//设置分区 + + + +-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView + +{ + + + return 1; + +} +//每个分区上得元素个数 + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section + +{ + return industry_kind.count; +} + +-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath + +{ + + NSUInteger row = [indexPath row]; + + industry_cell * cell =[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; + [cell sizeToFit]; + [cell setIsAccessibilityElement:YES]; + cell.backgroundColor =[UIColor whiteColor]; + NSDictionary *rowDict = [industry_kind objectAtIndex:row]; + [cell.industry setText:[rowDict objectForKey:@"data"]]; + return cell; +} +// 设置点击事件 +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + + + industry_cell * cell = (industry_cell *)[collectionView cellForItemAtIndexPath:indexPath]; + NSLog(@"%@",cell.industry.text); + + if([_delegate respondsToSelector:@selector(didSelect:)]){ + NSLog(@"test111"); + } + if(_delegate!=nil && [_delegate respondsToSelector:@selector(didSelect:)]){ + [_delegate didSelect:cell.industry.text]; + return; + }// if(cell.selected){ +// cell.industry.textColor = [UIColor colorWithRed:89.0/255 green:186.0/255 blue:239.0/255 alpha:1.0f]; +// }else{ +// //self.backgroundColor = [UIColor redColor]; +// +// cell.industry.textColor = [UIColor blackColor]; +// } + [self tappedCancel]; + + + + +} +//设置元素的的大小框 +-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section +{ + + UIEdgeInsets top = {0,0,0,0}; + return top; +} +// 定义上下cell的最小间距 +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { + return 0; +} + +// 定义左右cell的最小间距 +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { + return 0; +} +//设置元素大小 + +-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ + + + + return CGSizeMake(ScreenWidth/3, 45); + +} +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/industry.plist b/industry.plist new file mode 100644 index 0000000..8958aa6 --- /dev/null +++ b/industry.plist @@ -0,0 +1,78 @@ + + + + + + data + 互联网 + + + data + 电子商务 + + + data + 软件 + + + data + 通信/电子 + + + data + 金融/保险 + + + data + 文化/传媒 + + + data + 企业服务 + + + data + 教育培训 + + + data + 生物/医疗 + + + data + 建筑/房地产 + + + data + 制造 + + + data + 材料 + + + data + 贸易/物流 + + + data + 政府 + + + data + NGO + + + data + 运动/体育 + + + data + 快消 + + + data + 其他 + + + diff --git a/industry_cell.h b/industry_cell.h new file mode 100644 index 0000000..e831d80 --- /dev/null +++ b/industry_cell.h @@ -0,0 +1,22 @@ +// +// industry_cell.h +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import + +@interface industry_cell : UICollectionViewCell{ + + UILabel *down; + + UILabel *right; +} + + +@property (strong, nonatomic) UILabel *industry; + + +@end diff --git a/industry_cell.m b/industry_cell.m new file mode 100644 index 0000000..45e2751 --- /dev/null +++ b/industry_cell.m @@ -0,0 +1,46 @@ +// +// industry_cell.m +// collection_master +// +// Created by 是 撒 on 5/18/15. +// Copyright (c) 2015 芳仔小脚丫. All rights reserved. +// + +#import "industry_cell.h" +//获取设备的物理高度 +#define ScreenHeight [UIScreen mainScreen].bounds.size.height +//获取设备的物理宽度 +#define ScreenWidth [UIScreen mainScreen].bounds.size.width +@implementation industry_cell +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + + down = [[UILabel alloc] initWithFrame:CGRectMake(0, 44.5, ScreenWidth/3, 0.5)]; + right = [[UILabel alloc] initWithFrame:CGRectMake((ScreenWidth/3)-0.5, 0, 0.5, 45)]; + + down.text = @""; + [down setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; + right.text = @""; + [right setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; + + _industry = [[UILabel alloc] initWithFrame:CGRectMake(0.5, 0.3, (ScreenWidth/3)-1, 44)]; + _industry.text = @"成都"; + [_industry setTextColor:[UIColor blackColor]]; + _industry.textAlignment = NSTextAlignmentCenter; + _industry.font = [UIFont systemFontOfSize:12]; + _industry.backgroundColor = [UIColor clearColor]; + + + [self addSubview:down]; + + [self addSubview:right]; + [self addSubview:_industry]; + } + return self; +} + + +@end diff --git a/lowest_study.plist b/lowest_study.plist new file mode 100644 index 0000000..b86f23b --- /dev/null +++ b/lowest_study.plist @@ -0,0 +1,26 @@ + + + + + + data + 不限 + + + data + 大专 + + + data + 本科 + + + data + 硕士 + + + data + 博士 + + + diff --git a/test.png b/test.png new file mode 100644 index 0000000000000000000000000000000000000000..9866cbf21dc97bf365328f85ab6516481b51c972 GIT binary patch literal 2901 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 literal 0 HcmV?d00001 diff --git "a/\345\217\221\347\216\260.png" "b/\345\217\221\347\216\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..e553a90688ce768324f4aca4b19ebb746d6eb558 GIT binary patch literal 22069 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 literal 0 HcmV?d00001 diff --git "a/\346\210\221\347\232\204.png" "b/\346\210\221\347\232\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..0ae81afa4bd16b52a2ac6168997fceb50c30f0ef GIT binary patch literal 22069 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 NEKO}pl8lz@`XBcY$>9J1 literal 0 HcmV?d00001 diff --git "a/\346\234\272\344\274\232.png" "b/\346\234\272\344\274\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..4262be24c2f7d1e5506f8a6589b7c54a27df1870 GIT binary patch literal 22069 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 literal 0 HcmV?d00001 diff --git "a/\346\266\210\346\201\257.png" "b/\346\266\210\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..d4ce91de99fd9465f5e1637a248e7b0030ad1338 GIT binary patch literal 22069 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 literal 0 HcmV?d00001